System and method for industrial automation project code analysis

ABSTRACT

A system includes a processor and a memory accessible by the processor. The memory stores instructions that, when executed by the processor, cause the processor to receive an industrial automation project code file, wherein the industrial automation project code file defines one or more operations of an industrial automation system during performance of an industrial automation process, retrieve a set of industrial automation rules associated with a set of best practices for project code files, analyze the industrial automation project code file based on the set of industrial automation rules, including identifying one or more instances of inefficient tag usage, and identifying one or more sets of parallel overlapping tasks, and generate a report based the analysis of the industrial automation project code file based on the set of industrial automation rules.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is a continuation of U.S. patent application Ser. No.16/586,346, filed Sep. 27, 2019, entitled “SYSTEM AND METHOD FORINDUSTRIAL AUTOMATION PROJECT CODE ANALYSIS,” which is incorporated byreference herein in its entirety for all purposes.

BACKGROUND

Embodiments of the present disclosure relate generally to the field ofautomation control and monitoring systems. More particularly,embodiments of the present disclosure relate to techniques fordesigning, monitoring, and troubleshooting automation control systems.

This section is intended to introduce the reader to various aspects ofart that may be related to various aspects of the present techniques,which are described and/or claimed below. This discussion is believed tobe helpful in providing the reader with background information tofacilitate a better understanding of the various aspects of the presentdisclosure. Accordingly, it should be understood that these statementsare to be read in this light, and not as admissions of prior art.

Design of industrial automation systems typically involves a designerwriting portions of programmatic code for each device and/or objectwithin the industrial automation system. Accordingly, design of evenrelatively simple industrial automation systems involves a designerhaving multiple windows of code open at a time and paying closeattention to making sure the various portions of code properly functionwith one another. Though certain combinations of devices or objects maybe used frequently together, when used in a particular industrialautomation system, the designer writes code for each component as thoughthey have never been used together before. Further, in existing designenvironments, the designer is free to use incompatible objects together,or form invalid connections between objects, without any warning thatdesign actions taken may render the industrial automation systeminoperable. This may result in designer spending a great deal of timereviewing previous designs and/or specifications of candidate objects ordevices. If a problem arises, the designer is left on his or her own totroubleshoot the programmatic code for the industrial automation systemwithout any guidance as to what the issue is and how to resolve it.Additionally, if designer wishes to employ a particular namingconvention for objects or devices within an industrial automationsystem, the designer manually updates names of objects or devices when aname change is warranted by the naming convention. Accordingly, if thedesigner wishes to insert, remove, or relocate an object, the namingconvention may dictate that the names of objects upstream and/ordownstream of the change should be updated accordingly. Typically, adesigner would manually update the names one by one. Further, if thedesigner wishes to change naming conventions, the designer manuallyderives new object names according to the new naming convention and thengoes through and updates the names one by one. Not only is manuallyupdating the names of objects in the industrial automation system timeconsuming and tedious, but when each component has an associated portionof programmatic code that may reference other components in theindustrial automation system by name, manually updating component namesmay be subject to human error.

As a result of these factors, designers of industrial automation systemsare a relatively small, highly trained, and highly experienced group.Accordingly, rather than designing industrial automation systemsthemselves, customers typically hire as a designer as a contractor todesign an industrial automation system, or pay a vendor to design anindustrial automation system and deliver the programmatic code for thecustomer to implement. Accordingly, the customer may have limitedunderstanding of a design for an industrial automation system that itoperates, making modifications to that industrial automation systemdifficult and resource intensive. Further, once a design is implemented,the resultant industrial automation system may be operated by anoperator via a run-time environment. However, the run time environmentmay not provide the operator with avenues to make small adjustments ormodifications to the industrial automation system to troubleshoot theindustrial automation system when an issue arises. Instead, theindustrial automation system may be taken offline and an engineer ordesigner brought in to diagnose and resolve the problem.

BRIEF DESCRIPTION

When designing industrial automation systems with existing designsoftware, designers are free to use incompatible objects with oneanother, create invalid connections between objects, or otherwise takeactions that do not comply with best practices or internal guidelinesfor designing industrial automation systems. If a designer takesmultiple actions that do not comply with best practices or guidelinesduring design of an industrial automation system, issues that arise fromtaking these actions may not present themselves until later in thedesign process. Attempting to resolve the issue later in the designprocess, when the offending action is stacked under multiple subsequentdesign actions, may be time consuming and challenging to unpack andresolve. The disclosed techniques include applying a set of industrialautomation system design rules to determine whether each action taken bya designer (e.g., adding an object to a project, drawing connectionsbetween objects, etc.) is allowed by the rules. The rules may act as“design guardrails” to help designers design better systems moreefficiently, avoiding long periods of time spent troubleshooting. Insome cases, designers may be entirely prevented from taking prohibitedactions, whereas in other cases, designers having certain specifiedcredentials may be able to override the warning message that a givendesign action does not follow the guidelines.

Typically, designers designing industrial automation systems manuallyselect components they want to include in a system and defineconnections between those components. Accordingly, the designer mayspend a significant amount of time reviewing previous designs ofindustrial automation systems and reviewing specification sheets ofcomponents to determine the suitability of a given component for use inthe industrial automation system and the component's compatibility withother components within the system. The disclosed techniques includeusing AI and/or machine learning to consider actions taken by a designerin view of previous designs and known component specifications tosuggest design actions, which the designer may accept or reject.Suggestions may include, for example, using specific models ofcomponents, adding connections between components, inserting additionalcomponents, replacing end of life components with replacementcomponents, and so forth. When an action is suggested, the designer maychoose whether to accept the suggestion or dismiss the suggestion. Insome cases, the system may also provide the designer with contactinformation or hyperlinks to vendors or manufacturers of the suggestedcomponent, or other avenues to purchase the suggested component.

Typically, designers of industrial automation systems are left to theirown devices when troubleshooting a design of an industrial automationsystem. Accordingly, designers are left to develop their own processesfor troubleshooting designs. As a result, a designer's proficiency introubleshooting a design depends upon the troubleshooting processes heor she has developed, as well as the experience of the designer introubleshooting a wide range of circumstances. The disclosed techniquesinclude using AI and/or machine learning to analyze a historical dataset, identify when the instant issue has been encountered before, andsuggest a remedial action to the designer. For example, the system mayrecognize that a problem has been encountered and use a historical dataset to identify when the problem has been encountered in the past. Thesystem may then consider what was done in those previous occurrences toremedy the problem. The system may then identify one or more possibleremedial actions to address the problem. In some cases, the system mayrank or otherwise evaluate the possible remedial actions to identify alikelihood of success for each possible remedial action. The system maythen suggest one or more of the remedial actions to the designer. Forexample, the system may communicate to the designer, “The last time thisproblem occurred, we took this remedial action.” In some cases, thedesigner may have the option to automatically implement the suggestedremedial action, see instructions for manually implementing thesuggested remedial action, or dismiss the suggestion.

Industrial automation system software is typically separated intodesign-time environments and run-time environments. Design-timeenvironments are used by designers to design industrial automationsystems and develop the code that runs these systems. Typically, designof industrial automation systems occurs at a location remote from theindustrial automation system. In contrast, run-time environments areused by operators, on site, to monitor the operation of the industrialautomation system. Sometimes issues arise during operation of anindustrial automation system that only require minor adjustments toresolve (e.g., reset component, adjust set point, adjust threshold,etc.). Run-time environments typically do not have the capability tomake even minor adjustments to industrial automation systems.Accordingly, when an issue arises, the industrial automation system maybe stopped and a designer or engineer brought in to resolve an issuethat may only require minor adjustments. The disclosed techniquesinclude a light engineering client environment, which is similar to arun-time environment, but includes some functionality of the design-timeenvironment, allowing operators to make minor adjustments to anindustrial automation system to resolve minor issues. In someembodiments, the light engineering client may also be capable ofproviding recommendations for how to resolve issues that arise.

When designing industrial automation systems, designers typically writea portion of code for each object or device in the industrial automationsystem. Though a group of components may be used together frequently(e.g., a tank, a valve, and a pump), for each instance in which thegroup of components is used, the designer has to write new code definingthe interactions between the components. This can be tedious andresource intensive. The disclosed techniques include using componentlibraries that include objects that are programmed to interact with oneanother in known ways. Accordingly, the designer may drag componentsfrom a library into a design window, and the system may understand howthe components are intended to interact with each other. Using theexample from above, a user may drag a tank, a valve, and a pump into adesign environment, and the system may automatically arrange thecomponents and connect the components accordingly to how they arefrequently implemented. Each component in a library may have arespective portion of code that defines the operation of the respectivecomponent. Based on how the components are arranged and connected in thedesign window, the system may then generate or modify program code forthe components so the designer is not burdened with writing the code forthe system.

Typically, if a customer or designer wishes to use a naming conventionfor one or more industrial automation systems, it is the responsibilityof the designer to manually edit the names of components in librariesand/or components used in industrial automation systems. Thus, creatinga new naming convention and updating the names of existing components toadhere to the naming convention can be time consuming. Additionally,some frequently used naming conventions may give unique names to eachinstantiation of a component within an industrial automation system. Insuch a naming convention, the names may include fields that increase ordecrease along a flow path of the industrial automation system (e.g.,motor_1, motor_2, motor_3, etc.). However, when a component is insertedinto, removed from, or rearranged within, the middle of an industrialautomation system, it may be up to the designer to manually adjust thenames of the other components in the industrial automation system tomaintain the naming convention. Because this is tedious and timeconsuming, a designer may choose to break the naming convention or notmake the modification to the industrial automation system, even thoughit would improve the performance of the industrial automation system,because of the work involved in making the modification. The disclosedtechniques include using AI and/or machine learning to learn new namingconventions and propagate the new naming convention through one or moreindustrial automation systems and/or libraries, and to automaticallyadjust component names to maintain a naming convention when componentsare added, removed, or rearranged within the system.

Writing project code files for industrial automation systems istypically outsourced to contractors or third parties who are paid todeliver a project code file for an industrial automation system and thenare subsequently not involved in the operation of the industrialautomation system. Accordingly, the person who created the project codefile for a particular industrial automation system is frequently notavailable to make adjustments to the project code file or answerquestions about the project code file. Accordingly, while the customerthat paid to have the project code file generated may have possession ofthe project code file, the customer may have no understanding of thestructure of the project code file (e.g., the structure of the projectcode file, the quality of the project code file, etc.), and may not havethe ability to modify the project code file. The disclosed techniquesinclude a project code file analysis algorithm that may be applied toproject code files and generate a report for the project code file. Theproject code analysis algorithm may be configured to determine astructure of the project code file, create a visualization of theproject code file, identify dead code (i.e., code that is not executed)within the project code file, identify dead ends within the project codefile, identify inefficient tag usage, identify parallel concurrenttasks, consider the validity of connections between components, identifyoverload situations, calculate a complexity score for the code,determine whether the project code file meets an acceptance criteria,and so forth. Further, once the project code file has been analyzed, adatabase may be updated with data from the analysis. As the database ispopulated with data from analyzing numerous project code files,adjustments may be made to the project code analysis algorithm, suchthat the project code analysis algorithm improves over time.

DRAWINGS

These and other features, aspects, and advantages of the presentembodiments will become better understood when the following detaileddescription is read with reference to the accompanying drawings in whichlike characters represent like parts throughout the drawings, wherein:

FIG. 1 is a schematic of an industrial system, in accordance withembodiments presented herein;

FIG. 2 illustrates an embodiment of an industrial automationenvironment, in accordance with embodiments presented herein;

FIG. 3 is a diagrammatical representation of a control and monitoringsoftware framework illustrating how a design-time environment, arun-time environment, and a light engineering client environmentinteract with one another, in accordance with embodiments presentedherein;

FIG. 4 illustrates how the design-time environment interacts with anoperating system, an application, the run-time environment, and thelight engineering client environment, in accordance with embodimentspresented herein;

FIG. 5 is a screenshot of a dashboard of an industrial automationsoftware package, accessible via a web browser or a running as a nativeapplication, within which the design-time, run-time, and lightengineering client environments operate, in accordance with embodimentspresented herein;

FIG. 6A is a screenshot of an explorer window of the dashboard on FIG. 5when a system tab is selected from a vertical navigation bar, inaccordance with embodiments presented herein;

FIG. 6B is a screenshot of the explorer window 204 when the applicationtab 258 is selected from the vertical navigation bar 202, in accordancewith embodiments presented herein;

FIG. 6C is a screenshot of the explorer window when a devices tab isselected from the vertical navigation bar, in accordance withembodiments presented herein;

FIG. 6D is a screenshot of the explorer window when a library tab isselected from the vertical navigation bar, in accordance withembodiments presented herein;

FIG. 6E is a screenshot of the explorer window when an extensions tab isselected from the vertical navigation bar, in accordance withembodiments presented herein;

FIG. 7 is a screenshot of a design-time environment dashboard when auser begins creation of a new project, in accordance with embodimentspresented herein;

FIG. 8 is a screenshot of the design-time environment dashboard when auser opens an existing project, in accordance with embodiments presentedherein;

FIG. 9 is a screenshot of a pop-up window that opens when a user selectsan add device button within a devices window of the dashboard shown inFIG. 8 , in accordance with embodiments presented herein;

FIG. 10 is a screenshot of the dashboard showing various libraries whena library tab is selected from a vertical navigation bar, in accordancewith embodiments presented herein;

FIG. 11 is a screenshot of the dashboard showing a service providerlibrary when a service provider library tab is selected, in accordancewith embodiments presented herein;

FIG. 12 is a detailed item view for a temperature sensor, in accordancewith embodiments presented herein;

FIG. 13 is a screenshot of the dashboard illustrating the creation ofareas within the project, in accordance with embodiments presentedherein;

FIG. 14 is a screenshot of the dashboard in which the user has selecteda roller control object and dragged it into a guide roll area in adesign window, in accordance with embodiments presented herein;

FIG. 15 is a screenshot of the dashboard in which the user has selecteda motor object and dragged it into the guide roll area in the designwindow along with the roller control object, in accordance withembodiments presented herein;

FIG. 16 is a screenshot of the dashboard in which the user has attemptedto drag an incompatible object into the guide roll area in the designwindow, in accordance with embodiments presented herein;

FIG. 17 is a screenshot of the dashboard in which the user has added aroller control object and two of the motor objects to the guide rollarea in the design window, in accordance with embodiments presentedherein;

FIG. 18 is a screenshot of the dashboard in which the system hasproposed a connection to the user, in accordance with embodimentspresented herein;

FIG. 19 is a screenshot of the dashboard in which the user has drawn aninvalid connection, in accordance with embodiments presented herein;

FIG. 20 is a screenshot of the dashboard in which the user has selecteda routine and dragged it into the guide roll area in the design windowalong with the roller control object 600, in accordance with embodimentspresented herein;

FIG. 21 illustrates a flow chart of a process for defining a namingconvention and propagating the naming convention through one or moreprojects and/or one or more libraries, in accordance with embodimentspresented herein;

FIG. 22 illustrates a flow chart of a process for generating a name foran instantiation of on object within a project, in accordance withembodiments presented herein;

FIG. 23 illustrates a flow chart of a process for revising the names ofone or more existing objects in a project based on the addition of a newobject instantiation, in accordance with embodiments presented herein;

FIG. 24 illustrates an embodiment of the dashboard showing a project fora cookie making facility in the logical view style, in accordance withembodiments presented herein;

FIG. 25 illustrates an embodiment of the dashboard showing the projectfor the cookie making facility shown in FIG. 24 in a network view style,in accordance with embodiments presented herein;

FIG. 26 illustrates an embodiment of the dashboard showing the projectfor the cookie making facility shown in FIGS. 24 and 25 in a tree viewstyle, in accordance with embodiments presented herein;

FIG. 27 illustrates an embodiment of the dashboard showing the projectfor the cookie making facility shown in FIGS. 24-26 in a table viewstyle, in accordance with embodiments presented herein;

FIG. 28 illustrates an embodiment of the dashboard showing the projectfor the cookie making facility shown in FIGS. 24-27 in a logic viewstyle, in accordance with embodiments presented herein;

FIG. 29 is a screenshot of the dashboard in a split screen view, inaccordance with embodiments presented herein;

FIG. 30 is a screenshot of the dashboard that illustrates the creationof areas for an existing project, in accordance with embodimentspresented herein;

FIG. 31 is a screenshot of the dashboard in a tag editing mode, inaccordance with embodiments presented herein;

FIG. 32 is a screenshot of the dashboard in a logic editing mode, inaccordance with embodiments presented herein;

FIG. 33 is a screenshot of the dashboard in which the system issuggesting controllers for the cookie making project of FIGS. 24-27 , inaccordance with embodiments presented herein;

FIG. 34 is a screenshot of the dashboard in which the controllersuggestions have been accepted (e.g., via user input) and thecontrollers are being added to the project, in accordance withembodiments presented herein;

FIG. 35 is a screenshot of the dashboard in which an additional motioncontrol module has been suggested for the wrapper area, in accordancewith embodiments presented herein;

FIG. 36 is a screenshot of the dashboard displaying an end of lifenotification, in accordance with embodiments presented herein;

FIG. 37 is a screenshot of the dashboard showing a disconnectedcomponent and a new unconfigured component, in accordance withembodiments presented herein;

FIG. 38 illustrates a new replacement CLX controller in the packer areain place of the old CLX controller, in accordance with embodimentspresented herein;

FIG. 39 is a screenshot of the dashboard showing multiple people editinga totalizer routine simultaneously, in accordance with embodimentspresented herein;

FIG. 40 is a screenshot of the dashboard illustrating users sendingmessages to each other, in accordance with embodiments presented herein;

FIG. 41 is a screenshot of the dashboard in which a user has beenprompted as to how they would like to resolve conflicts, in accordancewith embodiments presented herein;

FIG. 42 is a screenshot of the dashboard displaying three mockups, inaccordance with embodiments presented herein;

FIG. 43 illustrates a flow chart of a process for analyzing a projectcode file, in accordance with embodiments presented herein;

FIG. 44 is a screenshot of the dashboard displaying an alarmnotification and an alarm pop-up window, in accordance with embodimentspresented herein;

FIG. 45 is a screenshot of the dashboard displaying an alarm summaryscreen, in accordance with embodiments presented herein;

FIG. 46 illustrates a home screen of a light engineering clientdashboard as displayed on an HMI, in accordance with embodimentspresented herein;

FIG. 47 is a screenshot of the light engineering client dashboard whenan alarm tab has been selected, in accordance with embodiments presentedherein; and

FIG. 48 is a screenshot of the light engineering client dashboard whenthe explorer window and the connected devices window have beenminimized, in accordance with embodiments presented herein.

DETAILED DESCRIPTION

One or more specific embodiments will be described below. In an effortto provide a concise description of these embodiments, not all featuresof an actual implementation are described in the specification. Itshould be appreciated that in the development of any such actualimplementation, as in any engineering or design project, numerousimplementation-specific decisions must be made to achieve thedevelopers' specific goals, such as compliance with system-related andbusiness-related constraints, which may vary from one implementation toanother. Moreover, it should be appreciated that such a developmenteffort might be complex and time consuming, but would nevertheless be aroutine undertaking of design, fabrication, and manufacture for those ofordinary skill having the benefit of this disclosure.

When introducing elements of various embodiments of the presentdisclosure, the articles “a,” “an,” “the,” and “said” are intended tomean that there are one or more of the elements. The terms “comprising,”“including,” and “having” are intended to be inclusive and mean thatthere may be additional elements other than the listed elements.

FIG. 1 is schematic of an industrial system 10, which may be displayed,for example, in a graphical user interface (GUI), such as a dashboard,viewable on a workstation, a desktop computer, a laptop computer, atablet, a smartphone, a human machine interface (HMI), some other mobiledevice, or any other computing device. The industrial system 10 may bepart of an industrial automation environment, such as an automobilemanufacturing facility, a food processing facility, a drillingoperation, a semiconductor or microprocessor fabrication facility, orsome other type of industrial facility. As shown, the industrial system10 may include one or more subsystems 12, 14, 16, 18, or areas, whichmay work in concert to perform one or more industrial processes. Forexample, in a food processing application, the first subsystem 12 may bea mixing system, the second subsystem 14 may be an oven or heatingsystem, the third subsystem 16 may be a packing system, and the fourthsubsystem 18 may be a wrapping system.

As shown, each subsystem may include one or more combinations ofcomponents, referred to as modules. For example, the first industrialsubsystem 12 shown in FIG. 1 includes an industrial controller 20, adrive 22, a motor 24, an input/output (I/O) device 26, a motion controlsystem 28, and an HMI 30. The second industrial subsystem 14 shown inFIG. 1 includes an industrial controller 20, a temperature sensor 32, anI/O device 26, and an HMI 30. The third industrial subsystem 16 shown inFIG. 1 includes an industrial controller 20, an industrially managedEthernet switch 34, a drive 22, a motor 24, a temperature sensor 32, amotion control system 28, and an HMI 30. The fourth industrial subsystem18 shown in FIG. 1 includes an industrial controller 20, an I/O device26, a motion control system 28, three motors 24, and an HMI 30. Itshould be understood, however, that the particular combinations ofcomponents shown in FIG. 1 are merely examples and that many othercombinations of components are envisaged. Further, it should beunderstood that the scope of possible industrial automation componentsis not intended to be limited to those shown in FIG. 1 . For example,other industrial automation components may include pumps, actuators,filters, robots, drills, mills, printers, fabrication machinery, brewkettles, reserves of materials and/or resources, and so forth.

The schematic of the industrial system 10 may be displayed to a userwithin a dashboard on a display of a computing device (e.g., a HMI, aprogramming terminal, a desktop computer, a tablet, a mobile device, asmartphone, etc.) that may allow a user to design, configure, modify,monitor, and/or troubleshoot the industrial system 10 or one or more ofthe industrial subsystems 12, 14, 16, 18 of the industrial system 10.FIG. 2 illustrates an embodiment of an industrial automation environment50. The industrial automation environment 50 provides an example of anindustrial automation environment 50 that may be utilized to design,configure, modify, monitor, and/or troubleshoot the industrial system10, but other environments are also envisaged. The industrial automationenvironment 50 includes one or more computing devices 52, the industrialsystem 10, a database 54, and an application integration platform 56.The computing devices may be equipped with software that allows a userto design and/or configure aspects of the industrial system 10, monitorthe industrial system 10 during operation, and troubleshoot theindustrial system 10 when the industrial system 10 encounters a problem.

The industrial system 10 may be configured to run a process 58. Forexample, the process 58 may include a compressor station, an oilrefinery, a batch operation for making food items, a mechanized assemblyline, and so forth. Accordingly, the process 58 may include a variety ofoperational components, such as electric motors, valves, actuators,sensors, or a myriad of manufacturing, processing, material handling,and other applications. Further, the process 58 may include control andmonitoring equipment (e.g., an industrial controller 20) for regulatingprocess variables through automation and/or observation. Thecontrol/monitoring device 20 may include, for example, automationcontrollers, programmable logic controllers (PLCs), programmableautomation controllers (PACs), or any other controllers used inautomation control. The illustrated process 58 may include one or moresensors 60 and/or one or more actuators 62. The sensors 60 may includeany number of devices adapted to provide information regarding processconditions, such as temperature sensors, pressure sensors, positionsensors, motion sensors, accelerometers, flow sensors, chemical sensors,and so forth. Similarly, the actuators 62 may include any number ofdevices adapted to perform a mechanical action in response to an inputsignal (e.g., linear motors, servos, electric motors, pumps, etc.).

As illustrated, the sensors 60 and actuators 62 are in communicationwith the control/monitoring device 20 (e.g., industrial automationcontroller) and may be assigned a particular address in thecontrol/monitoring device 20 that is accessible by the computing devices52, via the application integration platform 56 and database 54. In someembodiments, the sensors 60 and actuators 62 may be in communicationwith one or more of the computing devices (e.g., an HMI), via thecontrol/monitoring device 20, to operate equipment associated with theprocess 58. Indeed, the sensors 60 and actuators 62 may be utilizedwithin process loops that are monitored and controlled by thecontrol/monitoring device 20 and/or one or more of the computing devices52 (e.g., an HMI). Such a process loop may be activated based on processinputs (e.g., input from a sensor 60) or direct inputs (e.g., operatorinput received through the computing device 52).

The control/monitoring device 20 and the database 54 may be incommunication via a communication link 64, the database 54 and theapplication integration platform 56 may be in communication via acommunication link 64, and the application integration platform 56 andthe computing devices 52 may be in communication via communication links64. Note that, as shown and described with regard to FIG. 1 , there maybe multiple processes 58, multiple control/monitoring devices 20, andmany more sensors 60 and actuators 62 in an industrial system 10 thanare shown in FIG. 2 , but the number of components within the industrialsystem 10 has been reduced for clarity. Similarly, it should beunderstood that the industrial system 10 may be part of an automobilemanufacturing factory, a food processing plant, an oil drillingoperation, a microprocessor fabrication facility, or some other type ofindustrial enterprise. Further, the industrial system 10 may includedrives, pumps, filters, drills, motors, robots, fabrication machinery,mills, printers, a brew kettle, or any other pieces industrialautomation equipment.

As the process 58 operates, the sensors 60 and actuators 62acquire/produce operational data over time, such that the operationaldata is provided to the control/monitoring device 20. The operationaldata indicates the current status of the sensors 60 and actuators 62,such as parameters, pressure, temperature, speed, energy usage,operational equipment effectiveness (OEE), mean time between failure(MTBF), mean time to repair (MTTR), voltage, throughput volumes, times,tank levels, or any other performance status metrics. In someembodiments, the operational data may include dynamic charts or trends,real-time video, or some other graphical content. The control/monitoringdevice 20 is capable of transferring the operational data over thecommunication link 64 to the database 54, the application integrationplatform 56, and/or the computing devices 52, typically via acommunication links 64, which make up a communication network. Thedatabase 54 may be stored on one or more memory devices on premises, ona remote server, or in the cloud (e.g., public cloud, private cloud,etc.). Accordingly, the database 54 may reside in a single device or maybe distributed among multiple memory devices.

The application integration platform 56 may include a processing system,a communication transceiver, a router, a server, a data storage system,and a power supply, or some combination thereof. As with the database54, the application integration platform 56 may reside in a singledevice or may be distributed across multiple devices. The applicationintegration platform 56 may be a discrete system or may be integratedwithin other systems, including other systems within industrialautomation environment 50. In some examples, the application integrationplatform 56 could comprise a FACTORYTALK VANTAGEPOINT server systemprovided by Rockwell Automation, Inc.

The communication links 64 over which data is exchanged between theprocess 58, the sensors 60, the actuators 62, the control/monitoringdevice 20, the database 54, the application integration platform 56, andthe computing devices 52 could utilize metal, air, space, optical fibersuch as glass or plastic, or some other material as the transportmedium, including combinations thereof. Further, the communication links64 could include one or more network elements such as routers, gateways,telecommunication switches, servers, processing systems, or othercommunication equipment and systems for providing communication and dataservices. These communication links 64 may use various communicationprotocols, such as time-division multiplexing (TDM), Internet Protocol(IP), Ethernet, telephony, optical networking, packet networks, wirelessmesh networks (WMN), local area networks (LAN), metropolitan areanetworks (MAN), wide area networks (WAN), hybrid fiber coax (HFC),communication signaling, wireless protocols, communication signaling,peer-to-peer networking over Bluetooth, Bluetooth low energy, Wi-FiDirect, near field communication (NFC), or some other communicationformat, including combinations thereof. The communication links 64 couldbe direct links or may include intermediate networks, systems, ordevices.

The computing devices 52 may be representative of any computingapparatus, system, or systems on which the disclosed techniques fordesigning, configuring, modifying, monitoring, and/or troubleshootingindustrial automation systems 10 may be suitably implemented. Thecomputing devices 52 provide may be used as either servers or clientdevices in some implementations, although such devices could havealternative configurations. The computing devices 52 could include, forexample, mobile computing devices, such as cell phones, tabletcomputers, laptop computers, notebook computers, and gaming devices, aswell as any other type of mobile computing devices and any combinationor variation thereof, whether designed specifically for industrialautomation applications (e.g., HMI), or not. The computing devices 52may also include desktop computers, server computers, and virtualmachines, as well as any other type of computing systems, variations, orcombinations thereof. In some implementations, the computing devices 52could include a mobile device capable of operating in a server-likefashion which, among other uses, could be utilized in a wireless meshnetwork.

As shown in FIG. 2 , each of the computing devices 52 includes aprocessor 66, a memory device 68, software 70, a communication interface74, a user interface 74, and a display 76, which may or may not becombined with the user interface 74 (e.g., a touch screen that alsoaccepts user inputs via touches on its surface). The processor 66 iscommunicatively coupled to the memory device 68, the communicationinterface 72, the user interface 74, and the display 76. The processor66 loads and executes software 70 from the memory device 68. Theprocessor 66 may be implemented within a single processing device butmay also be distributed across multiple processing devices orsub-systems that cooperate in executing program instructions. Examplesof processors 66 include general purpose central processing units,application specific processors, and logic devices, as well as any othertype of processing device, combinations, or variations thereof.

The memory device 68 may include any computer-readable storage mediacapable of storing software 70 and readable by processor 66. The memorydevice 68 may include volatile and nonvolatile, removable andnon-removable media implemented in any method or technology for storageof information, such as computer-readable instructions, data structures,program modules, or other data. The memory device 68 may be implementedas a single storage device but may also be implemented across multiplestorage devices or subsystems co-located or distributed relative to eachother. The memory device 68 may include additional elements, such as acontroller, capable of communicating with the processor 66. Examples ofstorage media include random-access memory, read-only memory, magneticdisks, optical disks, flash memory, virtual memory and non-virtualmemory, magnetic cassettes, magnetic tape, magnetic disk storage orother magnetic storage devices, or any other medium which can be used tostore the desired information and that may be accessed by an instructionexecution system, as well as any combination or variation thereof, orany other type of storage media.

In operation, in conjunction with the user interface 74 and the display76, the processor loads and executes portions of software 70 to render agraphical user interface for one or more applications 80 for display bydisplay 76. The software 70 may be implemented in program instructionsand among other functions may, when executed by the processor 66, causean HMI associated with the industrial automation system to display aplurality of graphical elements that represent one or more industrialdevices. The software 70 may include, for example, an operating system78 and one or more applications 80. For example, the computing devices52 may include one or more applications 80 for designing, configuring,modifying, monitoring, and/or troubleshooting the industrial system 10.Examples of operating systems include Windows, iOS, and Android, as wellas any other suitable operating system. The software 70 may also includefirmware or some other form of machine-readable processing instructions(e.g., non-transitory) executable by processor 66. In general, thesoftware 70 may, when loaded into the processor 66 and executed,transform the computing device 52 from a general-purpose computingdevice into a special-purpose computing system customized to facilitatedesigning, configuring, modifying, monitoring, and/or troubleshootingindustrial automation systems 10. For example, encoding software 70 onthe memory device 68 may transform the physical structure of the storagemedia of the memory device 68. The specific transformation of thephysical structure may depend on various factors in differentimplementations of this description. Examples of such factors mayinclude, but are not limited to, the technology used to implement thestorage media of the memory device and whether the computer-storagemedia are characterized as primary or secondary storage.

In some examples, if the computer-storage media are implemented assemiconductor-based memory, software 70 may transform the physical stateof the semiconductor memory when the program is encoded therein. Forexample, software 70 may transform the state of transistors, capacitors,or other discrete circuit elements constituting the semiconductormemory. A similar transformation may occur with respect to magnetic oroptical media. Other transformations of physical media are possiblewithout departing from the scope of the present description, with theforegoing examples provided only to facilitate this discussion.

It should be understood that the computing device 52 is generallyintended to represent a computing system with which software 70 isdeployed and executed in order to implement applications 80 fordesigning, configuring, modifying, monitoring, and/or troubleshootingindustrial automation systems 10. Further, the application integrationplatform 56 may run on one or more computing devices 52, and computingdevices 52 may store and maintain the database 52. However, thecomputing system 52 may also represent any computing system on whichsoftware 70 may be staged and from which software 70 may be distributed,transported, downloaded, or otherwise provided to yet another computingdevice 52 for deployment and execution, or yet additional distribution.For example, computing device 52 could be configured to deploy software70 over the internet to one or more client computing systems forexecution thereon, such as in a cloud-based deployment scenario.

The communication interface 72 may include communication connections anddevices that allow for communication between the computing devices 52 orservices, over a communication network or a collection of networks. Insome implementations, the communication interface 72 receives dynamicdata over the communication network via one or more communication links64. Examples of connections and devices that together allow forinter-system communication may include network interface cards,antennas, power amplifiers, RF circuitry, transceivers, and othercommunication circuitry, and so forth.

The user interface 74, which may or may not include the display 76, mayinclude a voice input device, a touch input device for receiving agesture from a user, a motion input device for detecting non-touchgestures and other motions by a user, and other comparable input devicesand associated processing elements capable of receiving user input froma user. Output devices such as the display 76, speakers, haptic devices,and other types of output devices may also be included in the userinterface 74. The user interface 74 may also include associated userinterface software executable by processor 66 in support of the varioususer input and output devices discussed above. Separately or inconjunction with each other and other hardware and software elements,the user interface software and devices may provide a graphical userinterface, a natural user interface, or any other kind of userinterface. The user interface 74 may be omitted in some implementations.Along these lines, the computing devices 52 may also include additionaldevices, features, or functionality not discussed here for purposes ofbrevity.

Design-Time, Run-Time, and Light Engineering Client Environments

The computing devices 52 may include applications 80 that enable a userto design, configure, modify, monitor, and/or troubleshoot industrialautomation systems 10. The computing devices 52 may run (e.g., execute)a single application 80 or multiple applications 80 that provide adesign-time environment for designing, configuring, modifying, andmaking major changes to the industrial automation systems 10, a run-timeenvironment for monitoring the operations of one or more componentswithin the industrial automation systems 10, and a light engineeringclient environment for troubleshooting, or otherwise making minorchanges (e.g., relative to the changes made in the design-timeenvironment) to the industrial automation systems 10. FIG. 3 is adiagrammatical representation of a control and monitoring softwareframework 100 illustrating how the design-time environment, the run-timeenvironment, and the light engineering client environment interact withone another.

The framework 50 includes three interrelated software environments thatcan reside on a single system (e.g., computing device), or bedistributed among multiple computing devices. Specifically, adesign-time environment 102 permits a designer (e.g., a human user) todesign, configure, and make modifications to the industrial automationsystems. A run-time environment 104 enables an operator (e.g., a humanuser) to interact with an application, such as a process during run-time(e.g., during use of the interface, typically during interaction with orobservance of a process in operation). For example, an industrialautomation system may be graphically represented with run-timeinformation to an operator via the run-time environment 104 on a display(e.g., computing device or interface device screen). A light engineeringclient 106 enables an operator to troubleshoot and/or make limitedadjustments to the process in operation when a problem is encounteredduring operation or the operator wishes to make adjustments to thesystem without shifting to the design-time environment 102. Theenvironments interact as described below, in innovative ways to providegreatly enhanced programming via a computing device, such that theoperation of the computing device itself is more efficient.

The run-time environment 104 includes or provides access to objects 108.The objects 108 are software components that may include any accessibleor configurable element in a software environment. For example, theobjects 108 may include software components that are managed by therun-time environment 104. Accordingly, it should be understood that“objects” may include any components or self-sufficient programs thatcan be run as quasi-independent elements. Objects generally include fourfeatures: properties, methods, connections (or connection points) andcommunications interfaces. Properties, in this context, are attributesthat can be adjusted, such as to define an image or representation ofthe element in a screen view, as well as its location on the screen, andso forth. In this context, a method is an executable function (sometimesreferred to herein as the element's “functionality” or “state engine”),and defines an operation performed by execution of the element. Aconnection, in this context, is a link between elements, and can be usedto cause data (read from a memory or written to a memory) to be sent toanother element.

Specific examples of objects 108 may include software pushbuttons,timers, gauges, PLC communication servers, visualizations (such asscreens that illustrate state of components within the automationcontrol and monitoring system), and applications. In general, virtuallyany identifiable function may be configured as such an element. Forexample, such elements may include controllers, input/output (I/O)modules, motor control centers, motors, human machine interfaces (HMIs),operator interfaces, contactors, starters, sensors, drives, relays,protection devices, switchgear, compressors, network switches (e.g.,Ethernet switches, modular-managed, fixed-managed, service-router,industrial, unmanaged, etc.), scanners, gauges, valves, flow meters, andthe like. Moreover, as discussed below, such elements may communicatewith one another to perform a wide range of display, monitoringoperations and control functions. It should be noted that objects 108 donot require special limitations for supporting a design mode. Also,while elements associated with an image are quite useful, particularlyfor visualizations, many elements may not have a visual representation,but may perform functions within an HMI or other computing device, suchas calculations, or even management and data exchange between otherelements.

The run-time environment 104 typically operates using a communicationssubsystem 110 adapted to interconnect the objects 108. In practice, thecommunications subsystem 110 may be thought of as including theconnections of the objects 108. However, it may include a range ofsoftware, hardware and firmware that send data to and receive data fromexternal circuits, such as automation controllers, other computers,networks, satellites, sensors, actuators, and so forth.

The run-time environment 104 typically operates using a behavioralsubsystem 112, which is adapted to manage the behavior of the objects108. For example, responsibilities of the behavioral subsystem 112 mayinclude place and move objects, modify objects, group objects oninterchangeable screens, save and restore screen layouts, managesecurity, save and restore connection lists, and supply remote access tothe run-time environment 104. Such behaviors may be defined as part ofthe profile (i.e., the “method” or “state engine”) of each object.

The design-time environment 102 includes an advanced implementation ofthe behavioral subsystem 112 that facilitates direct or indirectmanipulation of the run-time environment 104, without impeding orcompromising the behavior of the run-time environment 104. That is,design and reconfiguration of the objects 108 can be done while aninterface is operating. In some instances, the behavioral subsystem 112may extend access to the run-time environment 104 via remote provisionof the design-time environment 102, such as in a conventional browser oran application run on a computing device. The behavioral subsystem 112allows a designer to interact with and change aspects of the run-timeenvironment 104 of an HMI via a separate computing device (e.g., aremote programming terminal) by serving the design-time environment 102or aspects thereof to the programming terminal from the HMI. Forexample, an HMI communicatively coupled to a laptop via a wired orwireless network connection may provide a user with configurationcapabilities by serving up a specific design-time environment 102 to thelaptop via the network.

By facilitating changes to objects 108, the design-time environment 102allows the designer to make interchangeable design-time models orspecialized implementations of the behavioral subsystem 112. A specificexample of a design-time implementation of the behavioral subsystem 112includes a Web-based or application-based design-time environment 102,which extends access to a run-time environment 104 on an HMI or othercomputing device via a wired or wireless connection between the HMI anda remote device. The Web-based or application-based design-timeenvironment 102 facilitates management of the objects withoutcompromising run-time performance or security. In one implementation,the behavioral subsystem 112 gives designers the ability to manipulateaspects of the run-time environment 104 using a Web browser orapplication that is capable of accessing a related interface or HMI.

As described in more detail below, the light engineering clientenvironment 106 may bring aspects of the design-time environment 102into an environment that has more in common with the run-timeenvironment 104 than the design-time environment 102. As previouslydescribed, the design-time environment 102 is primarily used by adesigner to design, configure, and/or modify the industrial automationsystem. After the industrial automation system has been configured, thedesigner likely moves on to other projects. In contrast, the run-timeenvironment 104 is primarily used by an operator within an industrialautomation environment to monitor the industrial automation system as aprocess runs. Use of the design-time environment 102 may involve thewriting and/or manipulation of computer code, which may be largelyabsent from the run-time environment 104. As such, the design-timeenvironment 102 and the run-time environment 104 may be designed fordifferent users having different skillsets and different capabilities.However, if a problem arises during operation of the industrialautomation system 10 that is relatively simple to resolve, it may not bean efficient use of resources to stop the operation of the industrialautomation system 10, exit the run-time environment 104, and have adesigner or engineer diagnose the problem and resolve the problem usingthe design-time environment 102. Accordingly, if a problem arises, thelight engineering client environment 106 may be available to theoperator to troubleshoot the problem, attempt to diagnose the problem,and use the more limited design capabilities of the light engineeringclient environment 106 to address the problem and resume operations withminimal downtime. If the operator is unable to resolve the problem viathe light engineering client environment 106, a designer, engineer, orservice technician may be brought in to diagnose and resolve the issuevia the design-time environment 104 or the like.

FIG. 4 represents, at a high level, how the design-time environment 102interacts with the operating system 78, the application 80, the run-timeenvironment 102, and the light engineering client environment 106. Thearrow 150 represents dynamic exchange of content between an HMI 152(i.e., a first computing device 52) and a programming terminal 154(i.e., a second computing device 52). As previously described,interaction with the design-time environment 102 is generally the taskof a designer 156, who initially configures the industrial automationsystem. The run-time environment 102 and light engineering clientenvironment 106 are generally interacted with by an operator 158directly via the HMI 154, or some other computing device 52 within theindustrial automation environment. It should be noted that while thedesign-time environment 102 operates according to certain parameters, ina current embodiment, the parameters may depend on the operating system78, the application 80, the run-time environment 102, and the lightengineering client environment 106. The design-time environment 102, therun-time environment 102, and the light engineering client environment106 may utilize certain base technologies (e.g., DHTML, HTML, HTTP,dynamic server content, JavaScript, Web browser) to operaterespectively. While, in the illustrated embodiment, the design-timeenvironment 102 resides on a separate platform from the run-timeenvironment 102 and the light engineering client environment 106, insome embodiments, they may reside on the same platform. For example, thedesign-time platform, run-time platform, and the light engineeringclient platform may be configured as or considered a single platform.

Design-Time Environment Dashboard

FIG. 5 is a screenshot of a dashboard 200 of an industrial automationsoftware package, accessible via a web browser or a running as a nativeapplication, within which the design-time, run-time, and lightengineering client environments operate (e.g., run). The dashboard 200includes a vertical navigation bar 202, an explorer window 204, aprimary window 206, and one or more accessory windows 208. As shown, thevertical navigation bar 202 includes a system tab, an editor tab, adevices tab, a library tab, a monitor tab, and an extensions tab, whichmay be displayed separate from the other tabs of the vertical navigationbar 202. Though not shown in FIG. 5 , in some embodiments, the verticalnavigation bar 202 may include an application tab. While other aspectsof the dashboard 200 may change as different tabs within the verticalnavigation bar 202 are selected, the vertical navigation bar 202 remainsmostly constant during use of the dashboard 200. As described in moredetail below with regard to FIG. 6 , when various tabs within thevertical navigation bar 202 are selected, the visualizations depictedwithin the explorer window 204 changes.

The information displayed within the primary window 206 is dependentupon which of a plurality of tabs 210 extending along a top edge of theprimary window 206 is selected, as well as selections within theexplorer window 204. As shown in FIG. 5 , the tabs across the top of theprimary window 206 may include, for example, a selected routine, tags, afaceplate associated with the selected routing, general information,control strategy, etc. The accessory windows 208 may be configurable bya user to display other related information, such as properties of aselected component, a project library, a toolbox, one or more externallibraries, and so forth.

FIGS. 6A-6E illustrate how selection of tabs within the verticalnavigation bar 202 control what is displayed within the explorer window204. FIG. 6A is a screenshot of the explorer window 204 when the systemtab 250 is selected from the vertical navigation bar 202. As shown, whenthe system tab 250 is selected from the vertical navigation bar 202, theexplorer window 204 displays a system explorer tab 252 and a viewsexplorer tab 25. When the system explorer tab 252 is selected, theexplorer window 204 displays a list 256 of components within theselected system or subsystem. As shown, the list 256 of components canselectively collapse and expand based on inputs from a user. When aselected component or subcomponent is expanded, the explorer window 204may display selectable options for programs, processes, or routinesperformed by the selected component, tags associated with the selectedcomponent, portions of code associated with the selected component,documents associated with the selected component, subcomponents of theselected component, relationships and/or dependencies with othercomponents, and so forth. As items are selected within the explorerwindow 204, the primary window of the dashboard may be updated todisplay data associated with the selected item. Though not shown in FIG.6A, when the view explorer tab 254 is selected, the explorer window 204is updated to display options for various alternative views of thecomponents shown in the explorer window 204.

FIG. 6B is a screenshot of the explorer window 204 when the applicationtab 258 is selected from the vertical navigation bar 202. As shown, whenthe application tab 258 is selected, the explorer window 204 displays acontroller tab 260 and an HMI tab 262. When the controller tab 260 isselected, the explorer window 204 displays a list 264 of controllerswithin the selected system or subsystem. As shown, each controllerwithin the list 264 may be selectively collapsed and expanded based oninputs from a user. When a selected controller is expanded, the explorerwindow 204 may display tags associated with the selected controller, acontroller fault handler, a controller power up handler, tasks performedby the controller, time periods, alarms, programs and/or routines, tagsand/or parameters associated with the selected task, relateddocumentation, and so forth. As items are selected within the explorerwindow 204, the primary window of the dashboard may be updated todisplay data associated with the selected item. Though not shown in FIG.6B, when the HMI tab 262 is selected, the explorer window 204 is updatedto display similar information for various HMIs within the system.

FIG. 6C is a screenshot of the explorer window when the devices tab 266is selected from the vertical navigation bar 202. As shown, the when thedevices tab 266 is selected, the explorer window 204 displays a list 256of devices that have been added to the selected system or subsystem. Thelist 268 of components can selectively collapse and expand based oninputs from a user. As shown, devices may be initially categorized(e.g., all devices, test devices, emulation devices, etc.), and thenfurther categorized into multiple subcategories (e.g., controllers,drives, MCC, etc.).

FIG. 6D is a screenshot of the explorer window 204 when the library tab270 is selected from the vertical navigation bar 202. As shown, when thelibrary tab 270 is selected, the explorer window 204 displays tabs forvarious connected libraries. For example, in the embodiment shown inFIG. 6D, the tabs include a project library tab 272, a service providerlibrary tab 274, and an external library tab 276. When each tab isselected, the explorer window 204 displays a list 278 of variousavailable components within the selected library. In some embodiments,as shown in FIG. 6D, the components within the library may be grouped bycategory. In the embodiment illustrated in FIG. 6D, the project librarymay be a library of components that have been approved for use in theproject in question. The service provider library may include componentsthat have been configured by a service provider and may be compatiblewith the instant project. The external library may be populated up by athird party and may include components that have been configured for acertain purpose, so be compatible with specific other components, and soforth.

FIG. 6E is a screenshot of the explorer window when the extensions tab280 is selected from the vertical navigation bar 202. As shown, the whenthe extensions tab 280 is selected, the explorer window 204 displays alist 282 of available extensions that may be added and/or utilizedduring a project.

Creating New Projects and Editing Existing Projects in the Design-TimeEnvironment

FIG. 7 is a screenshot of the design-time environment dashboard 200 whena user begins creation of a new project. In the instant embodiment, theuser has created a new project called “ACME System Project” and thesystem tab 250 has been selected from the vertical navigation bar 202.As shown in FIG. 7 , the dashboard 200 includes a start window 300, asystem status window 302, a devices window 304, a library window 306,and a team window 308.

The start window 300 provides a user with shortcuts to build out theproject. In the embodiment shown in FIG. 7 , the start window 300includes a build system button 310 and an import piping andinstrumentation diagram (P&ID) button 312. When the build system 310button is selected, the dashboard 200 may guide a user through basiclayout of a project and selection of one or more components to add tothe system. When the import P&ID button 312 is selected, the dashboard200 may open an explorer window that allows a user to locate a P&ID fileto import. The imported P&ID may then provide a framework for the newproject.

The system status window 302 displays one or more system statusindicators of the system. Because the project is new and does not yethave any components, the system status window 302 does not display asystem status. Similarly, because the project is new and no devices orlibraries have been added to the project, the device window 304 andlibrary window 306 do not display any devices or libraries,respectively. The device window 304 displays an add device button 314that, when selected, allows the user to select devices to add to theproject. Similarly, the library window 306 displays an add librarybutton 316 that, when selected, allows the user to select one or morelibraries to add to the project.

The team window 308 facilitates communication between members of a teamthat are working on the project. As shown, the team window 308 includesa messages tab 318, an activity tab 320, and a members tab 322. Theinformation displayed in the team window 308 is controlled by which tabis selected. In the screenshot shown in FIG. 7 , the members tab 322 hasbeen selected. When the members tab 322 is selected, the team window 308displays members of the team with access to the project. Because theproject is new, the list of team members only includes a single userprofile. However, the user may select the add team member button 324 toadd other uses to the team. Selection of the messages tab 318 causes theteam window 308 to display messages sent between members of the team.Selection of the activity tab 320 causes the team window 308 to displayrecent activity by team members within the project.

Though FIG. 7 shows the dashboard 200 for creation of a new project, inmany instances, the user will open an existing project rather thanopening a new project. FIG. 8 is a screenshot of the design-timeenvironment dashboard 200 when a user opens an existing project. Itshould be noted that some of the windows of the dashboard 200 in FIG. 8are different from the windows of the dashboard 200 shown in FIG. 7 .Some of the differences may be attributable to the dashboard in FIG. 7displaying a new project, while the dashboard in FIG. 8 displays anexisting project. However, some of the differences in windows may beattributable to the dashboard 200 being customizable by the user. Forexample, the dashboard 200 shown in FIG. 8 includes an edit this pagebutton 350 that, when selected, allows a user to control which windowsare displayed on the dashboard 200 and how the selected windows arearranged.

The dashboard 200 shown in FIG. 8 includes, in addition to the deviceswindow 304, the library window 306, and the team window 308 shown anddescribed with regard to FIG. 7 , a recent items window 352, and aproject areas summary window 354. The recent items window 352 displays alist of the most recently viewed items. Selecting an item from withinthe recent items window 352 may open the item in a new window, allowinga user to return to editing the selected item. The project areas summarywindow 354 displays the various areas of the project, which may beexpandable to display subareas and modules within the area. Each projectmay be divided into multiple areas, which may correspond to differentprocesses within the project. In the embodiment shown in FIG. 8 , theproject is a chemical processing project including three areas:extraction, fermentation, and distillation. Each area may or may not befurther subdivided into one or more sub-areas. Additionally, each areamay include one or more groups of components, called modules, that actin concert to perform some action or set of actions. As shown in FIG. 8, the project areas window displays the number sub-areas within eacharea, as well as the number of modules within each area. As with thestart window 300 shown in FIG. 7 , the project areas summary window 354includes the build system button 310 and the import P&ID button 312.

The devices window 304 displays a scrollable list of devices within theproject. Each device listing may include a name given to the device, amodel name, a status, and so forth. As shown, the top of the deviceswindow 304 may display the total number of devices within the project,as well as the add device button 314, allowing a user to add devices tothe project. Selection of a device within the devices window 304 maydisplay more detailed information about the selected device.

The library window 306 displays one or more libraries of components thathave been imported or otherwise linked to the project. For example, thelibraries may include libraries created for the project by the customer,public and/or private libraries created by a service provider, andpublic and/or private libraries created by a third party. The addlibrary button 316, allows a user to add libraries to the project.Selection of a library within the library window 306 may display moredetailed information about the selected library.

In the embodiment shown in FIG. 8 , the messages tab 318 has beenselected within the team window 308. The messages tab 318 includes anumber indicating the number of unread messages. Similar functionalitymay be utilized for the activity tab 320 (e.g., reflecting the number ofnotifications for new activities) and for the members tab 322 (e.g.,reflecting the number of notifications for members, or requests to addnew members). Because the messages tab 318 has been selected, the teamwindow 308 displays a message from a user named Jane Doe requestingreview/feedback on a new object.

FIG. 9 is a screenshot of a pop-up window 400 that opens when a userselects the add device button 314 within the devices window 304 of thedashboard 200 shown in FIG. 8 . In the instant embodiment, the user hasidentified a file called “Ethanol_Plant”, so the pop-up window 400 hasbeen populated with various components referred to in the identifiedfile. Each component referenced in the identified file is given a rowwithin the pop-up window 400. Columns are then generated for fieldsassociated with data within the identified file. For example, in theembodiment shown in FIG. 9 , the columns include data for tag, devicetype, model number, remote I/O rack tag, channel, controller, task, HMIserver, HMI screen, etc. From the pop-up window 400 shown in FIG. 9 ,the user may select one or more devices to import, or import all of thedevices. After the devices have been imported, the devices may be partof a library. A similar process may be used to add a library to theproject.

FIG. 10 is a screenshot of the dashboard 200 showing various librarieswhen the library tab 270 is selected from the vertical navigation bar202. As shown, the project library, the service provider library (e.g.,“Rockwell Product Library”), and the customer process library (e.g.,“ACME process library) appear in the explorer window 204. Upon selectionof one of the libraries in the explorer window 204, the selected libraryis displayed in the primary window 206. As shown in FIG. 10 , theprimary window 206 may also include a row of tabs (e.g., project librarytab 450, service provider tab 452, and customer process library tab 454)that allow a user to toggle between the various available libraries. Inthe embodiment shown in FIG. 10 the project library has been selectedand is being displayed in the primary window 206. As a project is workedon, members of the team may populate a library of items, which mayappear in the primary window 206 as a collapsible/expandable list. Theitems may include, for example, hardware (e.g., controllers, actuators,valves, pumps, agitators, heaters, sensors, etc.), definitions,routines, programs, instructions, calculations, alarms, etc.

In the instant embodiment, the library is grouped by definitions, add oninstructions (AOIs), add on graphics (AOGs) and user-defined data types(UDTs). As a user navigates the library and selects and item, theprimary window 206 may update to display more information about theselected item. It should be understood, however, that the specificcontents of the library shown in FIG. 10 are merely an example and thatlibraries having different contents are also envisaged. As is describedin more detail below, each object in the library has a correspondingfile or script of computer code, or a portion of computer code thatdefines the object and how the object interacts with other objects. Thecomputer code for the various objects in the library may be stored in adatabase. Upon execution by a processor, the code causes an industrialautomation control component to perform some action. Accordingly, as anentity (e.g., designing, customer, service provider, 3^(rd) partyvendor, etc.) builds out a library, how the various objects within thelibrary interact with one another may be considered. For example, thedatabase on which the library is stored may include compatibility datathat specifies with which objects within the library a given object inthe library is compatible, and how those objects interact with eachother (e.g., what are the inputs and outputs?).

Historical data may also be referenced for determining compatibilityand/or interaction between objects. Accordingly, when a user selects aset of commonly combined objects for a project, the library mayanticipate how those objects are going to interact with each other andmay as far as generating or retrieving code that defines the operationof the objects and the interaction between the objects so the designerdoes not have to write the code from scratch. In some embodiments, theautomatically generated or retrieved code may be accessible by thedesigner for editing to fine tune the code to the intended use.

Because populating a library for a complex project from scratch is asubstantial undertaking for the team working on the project, in someembodiments, a service provider may populate a library of items to beused by its customers. FIG. 11 is a screenshot of the dashboard 200showing the service provider library when the service provider librarytab 452 is selected. When the service provider provides a component,system, service, or the like to a customer, the service provider mayhave provided a similar system, service, or the like to a differentcustomer for use in a similar application. Accordingly, to reduce theresources expended by its customers and to reduce redundancies indesigning projects for similar applications, the service provider mayprovide a library that is accessible by the customer. In someembodiments, the library may be a public library that is available(e.g., accessible for download) to public or to customers of the serviceprovider (e.g., with user login credentials). In other embodiments, theservice provider may create a library specifically for a customer andlimit access to the library to individuals associated with the customeror to the team working on the project in question. As shown, the libraryincludes folders for instructions, hardware, graphics, and predefineddata types. The instructions folder may include, for example, subfoldersfor alarms, time/counter, compare, compute, etc., each of which mayinclude one or more library items and/or additional subfolders. Itshould be understood, however, that the specific contents of the libraryshown in FIG. 11 are merely an examples and that libraries havingdifferent contents are also envisaged.

Additionally, the customer may populate libraries intended to be usedacross multiple projects. For example, an oil and gas company, a foodprocessing company, or any other entity may design and build multiplefacilities that perform the same or similar functions in differentgeographical locations. Accordingly, selection of the customer processlibrary tab 454 may cause the primary window 206 to display a navigablelibrary (e.g., expandable/collapsible listing) populated by the customerto be used in multiple projects and linked to by the current project.

As previously described, a user may navigate through the variouslibraries (e.g., the project library, the service provider library, thecustomer process library, etc.) to arrive at a specific item, or findthe specific item via the devices tab 266. Upon selection of the item,the primary window updates to display more details information about theselected item. For example, FIG. 12 is a detailed item view for atemperature sensor. As shown, a top portion of the primary window 206includes a listing 500 of various information about the selectedtemperature sensor. A bottom portion of the primary window 206 includesa listing 502 of settings and/or outputs from the selected temperaturesensor.

Drag and Drop Design Interface

In the design-time environment, the dashboard 200 utilizes adrag-and-drop style interface that allows a user to drag items from alibrary into a design window. Previously, to configure a group of itemsto work with one another, a user would open a programming window foreach item in the group and individually write programming codespecifying operation of the item and how the item interacts with otheritems in the group (e.g., inputs, outputs, settings, algorithms,routines, and so forth). Though such a system may work well for usersthat are proficient in programming and are looking to program an item ora group of items to perform a somewhat uncommon task, for other users,such a system is challenging, time consuming, inefficient, and prone tohuman error. FIGS. 13-20 illustrate designing a project in thedesign-time environment using the drag-and-drop features. FIG. 13 is ascreenshot of the dashboard 200 illustrating the creation of areaswithin the project. A user may draw dotted lines in a design window 550,which is displayed within the primary window 206, to define areas withinthe project. In the instant embodiment, the project is for a paper line,so the areas include a first reel area 552, a guide roll area 554, apress area 556, and a second reel area 558. It should be understood,however, that the areas shown in FIG. 13 are merely an example and thatmany other areas and combinations of areas are also envisaged. Each areaincludes one or more components that work in concert to perform afunction. In some embodiments, the components within an area may befurther grouped into sub-areas and/or modules. Though the areas 552,554, 556, 558 shown in FIG. 13 are defined by squares and rectangles, auser may draw dotted lines or identify points that define any closedshape or polygon within the design window 550. After an area boundaryhas been drawn, the user may type in a name for the area, or select thearea name from a list.

As shown in FIG. 13 , the dashboard 200 includes a pop-up window 560that provides a user with options to add content to the design window,save the last action performed, and/or repeat the last action performed.Further, the accessory windows 208 may be populated with tools that auser may utilize to build the project. For example, the in the instantembodiment, the accessory windows include a tools window 562, adefinitions window 564, a logic window 566, an HMI window 568, and aproperties window 570. The tools window 562 includes tools that allow auser to manipulate the project within the design window 550. Forexample, the tools window 562 may include tools for zoom in, zoom out,select, draw line, draw shape, change view, and so forth. Thedefinitions window 564, the logic window 566, and the HMI window 568 mayinclude icons representing objects that a user can drag and drop intothe design window 550 to add to the project. In some embodiments, theaccessory windows 208 may be scrollable to reveal additional windowswith icons that can be dragged into the design window 550. Accordingly,the accessory windows 208 shown in FIG. 13 are not intended to belimiting. The properties window 570 may display properties of a selecteditem or may allow a user to search for items within the project or thevarious connected libraries having specific properties.

After an area has been selected, the design window 550 updates to showonly the selected area. In the instant embodiment, the user has selectedthe guide roll area 554, so the design window 550 has been updated toshow the guide roll area 554. FIG. 14 is a screenshot of the dashboard200 in which the user has selected a roller control object 600 anddragged it into the guide roll area 554 in the design window 550.Because the guide roll area 554 does not have any components attachedthereto, the design window 550 includes text inviting the user to drag(e.g., move) an object into the design window 550 to start designing theguide roll area 554. As shown in FIG. 14 , the user has selected aroller control object 600 and dragged it into the guide roll area 554 inthe design window 550.

After the roller control object 600 has been placed in the design window500, other objects may be selected and dragged into the design window500 to join the roller control object 600 in the guide roll area 554.FIG. 15 is a screenshot of the dashboard 200 in which the user hasselected a motor object 602 and dragged it into the guide roll area 554in the design window 550 along with the roller control object 600. Insome embodiments, the system may reference compatibility data and/orrules to determine whether or not an object the user drags into thedesign window 550 is compatible with the other objects that are alreadyin the area. The rules may consists of guidelines that define and/ordictate relationships between industrial automation devices orcomponents. FIG. 16 is a screenshot of the dashboard 200 in which theuser has attempted to drag an incompatible object (e.g., a valve object604) into the guide roll area 554 in the design window 550 along withthe roller control object 600. As shown, the user has attempted to addthe valve object 604 to the guide roll area 554. However, the system hasreferenced compatibility data and/or rules (e.g., stored in a database)and determined that the valve object 604 is not compatible with theroller control object 600. Accordingly, a warning message 606 has beendisplayed warning the user that the valve object 604 is not compatiblewith the other objects in the design area. In some embodiments, thesystem may prevent the user from placing incompatible objects in thedesign window 550, whereas in other embodiments, the user may be capableof overriding the system. Further, whether the user has authority tooverride the system may be dependent upon permissions granted to theuser, the user's rank, the user's department, the user credentials, etc.

After multiple objects have been placed in an area, the inputs, outputs,statuses, and other interface elements of the object may be identifiedand displayed. FIG. 17 is a screenshot of the dashboard 200 in which theuser has added the roller control object 600 and two of the motorobjects 602 to the guide roll area 554 in the design window 550. Aftermultiple objects have been added to an area, the design window 550 mayupdate to identify inputs, outputs, status indicators, and/or otherinterface elements for each object. In some embodiments, the user mayutilize the line drawing tool to draw lines 604 identifying connectionsbetween the inputs, outputs, status indicators, and/or other interfaceelements of the various objects. In other embodiments, the system mayutilize machine learning, historical data, compatibility data,preference data, and/or a set of rules to predict connections betweenthe devices. FIG. 18 is a screenshot of the dashboard 200 in which thesystem has proposed a connection to the user. In such an embodiment, theproposed connections may be suggested to a user via a message 610, asshown in FIG. 18 , which the user may review and accept or reject,either in bulk or individually. In other embodiments, the system mayproceed to draw the suggested connections, which the user can delete ifthe user desires other connections.

The system may be configured to monitor actions by the user in designingthe system and reference historical data to anticipate future actionsand make suggestions. These may include, for example, adding one or moreobjects, adding one or more connections, specific configurations ofobjects, etc. In some embodiments, the system may reference historicaldata to find previous instances of the monitored actions taking place.The system may then, based on the historical data, identify a set ofpossible next actions. The set of next actions may then be assigned aprobability based on the historical data. For example, the system mayconsider what percentage of instances in the historical data set when aspecific combination of objects were being used that the next objectadded to the project was object A. In some embodiments, when theprobability of a specific possible next action exceeds some thresholdvalue, the system may generate a recommendation for the specificpossible next action. In other embodiments, at certain intervals or uponcertain actions taking place, the system may select the specificpossible next action having the highest probability and generate arecommendation for the specific possible next action.

Further, as with the incompatible objects described above, the systemmay utilize historical data, compatibility data, preference data, and/ora set of rules to determine when connections provided by the userviolate connection rules or are otherwise invalid. FIG. 19 is ascreenshot of the dashboard 200 in which the user has drawn an invalidconnection. The user has attempted to draw a connection 612 between theinput of the roller controller object 600 to the input of the motorobject 602. Because connecting the input of one object to the input ofanother object breaks the connection rules, a warning message 614appears to notify the user that the connection 612 is invalid. As withthe incompatible objects described above, the system may prevent theuser from drawing invalid connections at all. In other embodiments, theuser may be capable of overriding the system, which may be dependentupon permissions granted to the user, the user's rank, the user'sdepartment, the user credentials, etc.

In addition to objects from the definitions window 564, the user candrag objects from other windows into the design window. FIG. 20 is ascreenshot of the dashboard 200 in which the user has selected a routine616 and dragged it into the guide roll area 554 in the design window 550along with the roller control object 600. The routine may define actionsof one or more of the objects within the guide roll area 554 in thedesign window 550. It should be understood however, that the specificcombinations of objects and elements shown in FIGS. 13-20 are merelyexamples and not intended to be limiting. Accordingly, othercombinations of objects and elements are also envisaged.

As previously discussed, each object in the library may have acorresponding file of computer code or portion of computer code thatdefines object and the object's interaction with other objects withinthe library. When the design of a project is complete, or atintermittent time periods during development, the system may take theportions of code for each object in the project and modify the codebased on the other objects in the project such that each objectinteracts with the other objects in the project as depicted in thedesign window 550. The modified portions of code may then be combinedinto a project code file that defines the operation of the entireproject. By automatically generating the project code file, writing allof the code for the project code file is no longer the responsibility ofthe designer.

Customer-Specific Naming Conventions

A user may develop custom customer-specific naming conventions forobjects in the design-time environment, via the dashboard 200, which maythen be propagated through one or more projects and/or one or morelibraries used by the corresponding customer. That is, different clientsmay use different naming conventions (e.g., formats) to designate anidentity of each device. For example, motors may be designated as“MOTOR_1,” “MOTOR_2,” and so on. In addition, the naming convention mayprovide some information regarding a hierarchical level of therespective device. For instance, for systems that are organizedaccording to areas, sections, and devices, motors may be designated as“SECTION1_MOTOR2.” Updating libraries and/or projects of objects toadhere to naming conventions may be resource intensive, tedious, andprone to human error. Accordingly, the following techniques may be usedto learn a naming convention and apply the naming convention to one ormore groups of objects by giving the objects new names that comply withthe new naming convention. Additionally, as the number of devices in asystem grows, it becomes increasingly challenging to add new devicesinto an existing system's naming convention. That is, a new motorinstalled in a system that should be associated with a particular numberbecause of its location may be provided a different number because ofthe particular number is already used to represent another motor.However, by employing the embodiments described herein, any device mayreceive the correct or appropriate naming designation and name changesfor other relevant devices may be automatically incorporated throughoutthe system.

By way of example, FIG. 21 is a flow chart of a process 620 for defininga naming convention and propagating the naming convention through one ormore projects and/or one or more libraries. At block 622, one or moreexample object/device names and/or definitions of a naming convention,or partial definitions of a naming convention are received. In oneembodiment, the user may provide one or more names for objects to beused as examples. In some embodiments, the one or more example names mayinclude objects selected from an existing library that accord with thenaming convention. Further, in some embodiments, data from otherprojects in which the naming convention was used may be provided astraining data. The number of examples may correspond to the complexityof the underlying naming convention. For example, in some embodiments,for simple naming conventions, a single example name may be given. Forcomplex naming conventions, 5, 10, 20, or more examples may be provided.Further, as is described in more detail below, a user may rely on afeedback loop to provide additional examples over time to fine tune thenaming convention.

In other embodiments, the user may provide a definition or a partialdefinition of the underlying naming convention. For example, the usermay define the various fields of a naming conventions, open or closedlists of examples for possible values for one or more fields, and/orprovide rules for how the naming convention is applied to a project,library, etc. For example, the user may define a naming convention asincluding an object type field, a model name/number field, and/or aninstantiation number field, where the object type field represents arespective object type (e.g., motor, controller, routing, pump, valve,etc.), the model name/number field represents the model name/number ofthe device, and the instantiation number field represents the number ofinstantiations of the object type within the area or the project. Insome embodiments, the naming convention may also include an area fieldrepresenting the area of the project in which the object is disposed. Itshould be understood, however, that these are merely examples and thatany naming convention the user desires may be used. In some embodiments,fields may be omitted from an object's name when the object is in thelibrary, and then added to the name of an instantiation of the objectwhen added to a project. For example, the instantiation and/or areafields may be omitted from an object's name when the object is in alibrary, as the object in the library is not tied to a particularinstantiation or area. However, when an instantiation of the object isplaced in a project, the name of the instantiation of the object mayappear with an instantiation field, an area field, and/or one or moreadditional field. This is described in more detail below with regard toFIG. 22 .

The user may also provide rules or guidelines for how the namingconvention is to be implemented. For example, the user may specify thatthe instantiation number field counts upward for the whole project orresets for each area. Further, the user may specify that theinstantiation field may be omitted for the first object of a givenobject type until a second object of the object type is added, at whichpoint the instantiation field for the first object is included as havinga value of “1” and the instantiation field for the second object isgiven a value of “2”.

At block 624, a machine learning algorithm may be applied to thereceived example names and/or naming convention definitions to deriveone or more rules for defining the naming convention. In someembodiments, the machine learning algorithm may also use otherwise knowninformation about the objects associated with the example object names(e.g., object type, instantiation number, area, etc.) when deriving therules for defining the naming convention. For example, the machinelearning algorithm may recognize alphanumeric character strings thatcorrespond to known object types, known area names, known instantiationnumbers, known component manufacturers, known part model names/numbers,known serial numbers, other known alphanumeric character strings, and/orknown abbreviations of these known alphanumeric character strings. Insome embodiments, because naming conventions may follow a handful ofcommon forms, the naming convention may be identified with an acceptablelevel of confidence (e.g., 70%, 80%, 90%, etc.) based on a small numberof example names.

In some cases the underlying naming convention may even be identifiedwith an acceptable level of confidence based on a single example. Forexample, the design window 550 in the dashboard 200 shown in FIG. 20include a first motor object named “Motor_1”. Based on this singleexample, the naming convention may be understood to include an objecttype field and an instantiation number field, separated by anunderscore, where the object type field is populated by a characterstring assigned to a respective object type (e.g., motor, controller,routing, pump, valve, etc.), and the instantiation number fieldcorresponds to the number of instantiations of the object type withinthe area or the project. Accordingly, when a second motor is draggedinto the design window 550, based on the assumed naming convention, theobject may be given the name “Motor_2”.

At block 626, other devices to which the naming convention applies areidentified. This may include, for example, searching the instantproject, one or more other projects, the instant library of objects, oneor more other libraries of objects, objects corresponding to industrialautomation devices connected to the network, etc. The naming conventionmay be determined to apply to an object or industrial automation devicebased on the item being of a known object type, the item being used inan area of a project, used in a specific project, existing in a specificlibrary, the data for all of the fields in the naming convention beingknown for an object, etc. In some embodiments, once the devices areidentified, the devices in question may be presented to a user (e.g.,via a GUI) to confirm that the user wishes to apply the namingconvention to the identified devices. In some embodiments, if the userwishes not to apply the naming convention to an identified device, themachine learning algorithm may be updated to reflect that the userwishes to exclude the identified devices from the naming convention.

At block 628, the derived rules defining the naming convention are usedto generate a derived new name for the one or more identified devices.For example, in the example given above with respect to FIG. 20 , if athird motor was in the design window 550, but named according to itsserial number (e.g., “123456789”), the third motor may be identified anda new name generated in accordance with the naming convention (e.g.,“Motor_3”). At block 630, the derived new name may be presented to auser (e.g., via a GUI) for review. In some embodiments, multiple derivednew names may be presented to the user at once for bulk review. If theuser approves the derived new name (block 632), the name may bepropagated through the instant project, one or more other projects, theinstant library, one or more other libraries, etc. by replacing the oldname with the derived new name (block 634). That is, otherinstantiations of the same object or device in other libraries orprojects may be updated to replace the old name with the new name.Further, approval of the new name by the user may be indicative of thederived rules defining the naming convention being correct. As such, thesystem may derive new names for other objects according to the namingconvention and replace the old names for the other objects with the newderived names throughout one or more libraries or projects withoutadditional input from the user. However, in some embodiments, if theuser rejects the derived new name, the feedback may be utilized tofurther train the machine learning algorithm and update the rulesdefining the naming convention. It should be understood that in someembodiments, the user review and approval of blocks 630 and 632 may beomitted and the derived new name for one or more devices mayautomatically be propagated through one or more projects and/or one ormore libraries without review and approval by the user. Further, in someembodiments, a user may designate one or more other projects and/or oneor more other libraries to which to propagate the naming convention.

FIG. 22 is a flow chart of a process 640 for generating a name for aninstantiation of on object within a project. At block 642, an input isreceived placing an instantiation of an object in a design window. Forexample, a user may select an object from a library and drag the objectinto the design window. In other embodiments, the user may select anobject from the library and insert or paste the object into the designwindow. In further embodiments, the user may select an instantiation ofan object already in the design window and copy and paste the object orduplicate the object to create a new instantiation of the object. Theuser may also provide inputs locating the instantiation of the objectwithin the design window, relative to other objects in the designwindow, and/or specifying how the object interacts with, or is coupledto, other objects in the design window.

At block 644, a name for the object instantiation is determinedaccording to a naming convention. In some embodiments, the name of theinstantiation may be the same as appears in the library. In otherembodiments, the name of the particular instantiation of the object maybe different from the name shown in the library. For example, fields maybe added to the name (e.g., area field, instantiation number field,etc.), fields may be changed, fields may be removed, etc. to reflect thelocation of the object instantiation within the project and the objectinstantiation's interactions with other objects. For example, an objectfor a motor may appear as “Motor” in the library, but when the object isinserted into a project, the name for the particular instantiation ofthe object may be “Motor_1” or “Section1_Motor2”. At block 646, an iconfor the object and the determined name for the object instantiation, oran abbreviation of the determined name for the object instantiation, maybe displayed within the design window. The user may then provide inputsadjusting the position of the object within the design window andspecifying how the object is to interact with other objects in theproject.

At block 648, the underlying portion of code for the instantiation ofthe object may be updated to reflect the new name. For example, theportion of code may include place holders for the name for the objectinstantiation. The portion of code may be searched for the placeholders, which are then replaced with the new name for the objectinstantiation. In other embodiments, the portion of code for the objectinstantiation may include one or more instances of an old name for theobject instantiation. In such embodiments, the portion of code may besearched for instances of the old name. Once an instance of the old nameis identified, the portion of code may be modified to replace theinstance of the old name with the new name. Further, in someembodiments, the underlying portions of code for the other objects inthe project may be updated to reflect the new name of the instantiationof the object. For example, the portions of code associated with otherobjects in the project may reference the instantiation of the object(e.g., receive input from object instantiation, send output to objectinstantiation, receive control signal from object instantiation, sendcontrol signal to object instantiation, receive set point from objectinstantiation, send set point to object instantiation, receivemeasurement value from object instantiation, send measurement value toobject instantiation, and so forth.). In such embodiments, the portionsof code associated with the other objects in the project may be searchedfor references to the object instantiation (e.g., place holders, the oldname for the object instantiation, etc.) and replaced with the new namefor the object instantiation.

As previously described, as the number of devices in a system grows,maintaining a logical naming convention may be difficult as objects areadded, removed, and/or rearranged. A logical naming convention maydictate, for example, that values for one or more fields within a nameincrease or decrease with each instantiation along a flow path of asystem. In one embodiment, a value for a field of a first objectupstream of a second object may be higher than that of the secondobject. In another embodiment, the value for the field of the firstobject upstream of the second object may be lower than that of thesecond object. As such, the value for the field may count upward ordownward in the direction of flow. The direction of flow may refer tothe flow of product within the system, the flow of data within a system,the flow of logic within the system, the actual physical arrangement ofcomponents within the system, the sequential flow of steps of a process,and so forth. For example, a project may include motors named “Motor_1”,“Motor_2”, “Motor_3”, and “Motor_4”. If a user adds a new motor betweenMotor_2 and Motor_3, based on the location of the new motor, the logicalname for the new motor may be “Motor_3” and, as such, the names ofMotor_3 and Motor_4 should be adjusted accordingly (e.g., Motor_3becomes Motor_4, and Motor_4 becomes Motor_5). However, adjusting thenames of the other components and the underlying associated portions ofcode may be extremely resource intensive, tedious, and prone to humanerror, especially for systems with many more than 4 or 5 motors.Accordingly, the likely result is that the user names the new motor“Motor_5” and locates the motor between Motor_2 and Motor_3, or decidesnot to add the additional motor at all, even though it would improve theoperation of the system.

Accordingly, the disclosed techniques may be used to adjust the names ofother objects in a project based on the addition, removal, or relocationof an object. FIG. 23 is a flow chart of a process 660 for revising thenames of one or more existing objects in a project based on the additionof a new object instantiation. At block 662, an input is receivedplacing an instantiation of an object within the design window of aproject. For example, a user may select an object from a library anddrag the object into the design window. In other embodiments, the usermay select and an object from the library and insert or paste the objectinto the design window. In further embodiments, the user may select aninstantiation of an object already in the design window and copy andpaste the object or duplicate the object to create a new instantiationof the object. The user may also provide inputs locating theinstantiation of the object within the design window, relative to otherobjects in the design window, and/or specifying how the object interactswith, or is coupled to, other objects in the design window.

At block 664, a name for the object instantiation is determinedaccording to a naming convention, based on the object instantiation'sposition within the design window relative to other objects. The name ofthe instantiation may be the same as appears in the library, or the nameof the particular instantiation of the object may be different from thename shown in the library. For example, the name of the particularinstantiation may include fields omitted from the listing of the objectin the library (e.g., area field, instantiation number field, etc.). Inother embodiments, fields may be changed, fields may be removed, etc. toreflect the location of the object instantiation within the project andthe object instantiation's interactions with other objects.

At block 666, a determination is made that the names of one or moreother object instantiations within the project should be revised toaccount for the new object instantiation. For example, values for somefields may be adjusted to account for the insertion of the new objectinstantiation. In the example described above, a user adds a new motorbetween Motor_2 and Motor_3 of a system containing Motor_1, Motor_2,Motor_3, and Motor_4. Based on the location of the new motor, it isdetermined that the new motor should be named “Motor_3” and the names ofMotor_3 and Motor 4 adjusted accordingly to become becomes Motor_4 andMotor_5, respectively. At block 668, new names for the surroundingobjects are generated based on the insertion of the objectinstantiation. At block 670, the underlying portions of code for theinstantiation of the object and one or more other object instantiationsin the project may be updated to reflect the new names for the objectinstantiations and the other object instantiations in the project. Forexample, the portions of code for the various object instantiations mayinclude place holders for the names of object instantiations or oldnames of the object instantiations. Accordingly, the portion of code maybe searched for the place holders or old names, which are then replacedwith the new names for the object instantiations.

Though the above techniques are for situations in which an objectinstantiation has been added to a project, it should be understood thatsimilar techniques may be used when an object instantiation is removedfrom a project, modified, or relocated within a project such that thenames of other object instantiations within the project should bechanged. For example, when an object instantiation is removed from theproject, the names for other object instantiations within the project,and portions of code referencing those object instantiations, may berevised with new names. Using the example described above, if a useradds removes Motor_2 from a system containing Motor_1, Motor_2, Motor_3,and Motor_4. The names of Motor_3 and Motor 4 may be adjustedaccordingly to become Motor_2 and Motor_3, respectively.Correspondingly, when an object instantiation is relocated within theproject, the names for other object instantiations within the project,and portions of code referencing those object instantiations, may berevised with new names. Continuing with the same example describedabove, if a user moves Motor_2 within a system containing Motor_1,Motor_2, Motor_3, and Motor_4 to a location between Motor_3 and Motor_4,the names of Motor_2, Motor_3, and Motor_4 may be adjusted accordinglysuch that Motor_3 becomes Motor_2, and Motor_2 becomes Motor_3.Accordingly, the to reduce the tedious workload on designers to renameobjects within a system in response to addition, removal, or relocationof objects, which is also prone to human error, and to incentivizedesigners to implement designs of systems that are going to maximizeperformance, the names of components within a project and the underlyingportions of code may be automatically updated in response to theaddition, removal, or relocation of an object within the project.

Design Environment View Options

In the design-time environment, the dashboard 200 may be configured todisplay projects in several different view styles that are selectable bythe user. In FIGS. 13-20 , the dashboard 200 is shown in the logicalview style, however, other styles may be available. FIG. 24 illustratesan embodiment of the dashboard 200 showing a project for a cookie makingfacility in the logical view style. As shown, the design window of thedashboard 550 includes multiple areas including a mixer area 700, anoven area 702, a packer area 704, and a wrapper area 706. In theillustrated embodiment, the mixer area 700 includes an industrialcontroller 20 (e.g., CLX), a drive 22, a motor 24, an input/output (I/O)device 26, a motion control system 28 (e.g., KINETIX), and an HMI 30.The oven area 702 includes an industrial controller 20 (e.g., CLX), atemperature sensor 32, an I/O device 26, and an HMI 30. The packer area704 includes an industrial controller 20 (e.g., CLX), an industriallymanaged Ethernet switch 34 (e.g., STRATIX), a drive 22, a motor 24, atemperature sensor 32, a motion control system 28 (e.g., KINETIX), andan HMI 30. The wrapper area 706 includes an industrial controller 20(e.g., CLX), an I/O device 26, a motion control system 28 (e.g.,KINETIX), three motors 24, and an HMI 30. It should be understood,however, that the particular combinations of components shown in FIG. 24are merely examples and that many other combinations of components areenvisaged. Further, it should be understood that the scope of possibleindustrial automation components is not intended to be limited to thoseshown in FIG. 24 . As shown, the logical view is characterized by thevarious areas 700, 702, 704, 706 being separated from one another suchthe areas are self-contained and connections between components do notcross area boundaries (i.e., the dotted lines). Further, connectionsbetween components are represented by a single line. In someembodiments, not all components that are in communication with oneanother are connected by a line on the dashboard 200. For example,though one or more components within an area may be in communicationwith the HMI 30, in the dashboard 200 shown in FIG. 24 , none of theHMIs 30 are connected to components with lines. Accordingly, the logicalview offers a simplified view of a project that reduces the number ofconnections shown so as to communicate how the system components withinan area interact with one another.

A user may toggle between various available view options using thedrop-down view menu 708. FIG. 25 illustrates an embodiment of thedashboard 200 showing the project for the cookie making facility shownin FIG. 24 in a network view style. As shown, whereas the connectionlines within each area of in the logical view are mostly vertical, inthe network view, the lines are mostly horizontal. Further, the areasemphasized in the logical view are deemphasized in the network viewstyle. In some embodiments, as shown in FIG. 25 , the area boundariesmay be completely omitted. As shown in FIG. 25 , the network view styleemphasizes network architecture and connections between componentsthrough which data (e.g., control signals, measurement signals, etc.)pass.

FIG. 26 illustrates an embodiment of the dashboard 200 showing theproject for the cookie making facility shown in FIGS. 24 and 25 in atree view style. As shown, when the tree view style is selected in thedrop-down menu 708, the dashboard transitions to a configuration similarto the configuration shown and described with regard to FIG. 5 , inwhich the explorer window 204 occupies one side of the dashboard 200,the primary window 206 occupies the middle of the dashboard 200, and theaccessory windows 208 occupy a second side of the dashboard 200,opposite the explorer window 204. The explorer window 204 displays anexpanding and collapsing nested list of all of the components in theproject. As a user navigates the explorer window 204 and selectscomponents, information about the selected components is displayed inthe primary window 206. The structure of the nested list of thecomponents in the explorer window 204 corresponds to how the variousprojects and components within a project are configured relative to eachother. In the embodiment shown in FIG. 26 , the dashboard is for acustomer called “MightyQ”, for one of multiple lines (e.g., line 1)within a process and/or facility called “cookie”. As was shown anddescribed with regard to FIG. 24 , Line 1 includes the mixer area 700,the oven area 702, the packer area 704, and the wrapper area 706. Eacharea is expandable to expose the components within the area. Forexample, as shown in FIG. 26 , the mixer area 700 includes an HMI client30, a CLX chassis, including a CLX M1 controller, an input module, andan output module, and a PowerFlex motion control system 28 includingthree KINETIX units. Similarly, as shown in FIG. 26 , the oven area 702,the packer area 704, and the wrapper area 706 each include expandablesubsystems.

Periodically, the system may generate an alarm, an alert, or aninformational notification (collectively referred to as notifications)for a specific component or group of components. As shown in FIG. 26 ,notifications 710 may appear in the explorer window 204 on or next tothe component to which the notification is related. In the instantembodiment, the notification 710 is an exclamation point inside adiamond. However, it should be understood that notifications may takemany different forms (e.g., a star, a colored shape, emphasis ordeemphasis of the object, etc.). Further, the shape, color, or style ofthe notification may change to reflect the category of the notification,the severity of the notification, etc. After selection, a pop-up windowmay appear, or the primary window 206 may update to show moreinformation. Another option for viewing notifications is a table view(selectable by via the drop down view menu 708). FIG. 27 illustrates anembodiment of the dashboard 200 showing the project for the cookiemaking facility shown in FIGS. 24-26 in a table view style. The tableview emphasizes alarms, alerts, and informational notifications bydisplaying information in a table 750. Each row within the table 750corresponds to a notification. The table 750 has columns for displayinginformation for different fields within the table. As shown, the fieldsmay include, for example, notification type 752, area 754, date and time756, component 758, and notification message 760. The notification typefield 752 may include, for example alarm, alert, warning, information,etc. The date and time field 756 specifies the date and time of thenotification. The equipment field 758 specifies the piece of equipmentassociated with the notification. The message field 760 displays amessage of the notification. In some embodiments, the table 750 mayinclude a column of checkboxes 762 that allows a user to deal withand/or dismiss notifications in bulk. It should be understood, however,that in other embodiments, the table 750 may include differentcombinations of fields, including fields not shown, that the fieldsshown in FIG. 27 .

FIG. 28 illustrates an embodiment of the dashboard 200 showing theproject for the cookie making facility shown in FIGS. 24-27 in a logicview style. As shown, the logic view is available via the editor tab 800of the vertical navigation bar 202. Various components appear in anexpandable/collapsible nested list in the explorer window 204. Logic isa nested item within most of the components in the explorer window 204.By selecting the logic for a particular component, the logic associatedwith that component appears in the primary window 206. Further, when acomponent is selected in the explorer window 204, the primary window 206is updated to display information about the component. For a selecteddevice, the primary window 206 may include a logic tab 802, a tags tab804, an HMI tab 806, and an alarms tab 808. As shown in FIG. 28 , whenthe logic tab 802 is selected, the primary window 206 displays a logicschematic 810 describing the various logic tasks for which the selectedcomponent has been programmed to perform.

In some embodiments, the logic view style may include a logicdiagnostics tool that occupies a logic diagnostics tool window 812within the primary window 206. The logic diagnostics tool may run one ormore scripts or algorithms and/or apply a set of rules to analyze thelogic within a project. In some embodiments, the scope of the logicdiagnostics tool may be limited to a single selected component. In otherembodiments, the logic diagnostics tool may consider a module having anumber of components, multiple modules of components, an area, multipleareas, a whole project, etc. The logic diagnostics tool window 812includes a logic diagnostics tool banner 814, which provides a summary816 of results of a logic diagnostics run, including for example, thenumber of errors, the number of warnings, the number of informationalmessages, etc. A user may select specific items within the summary 816to view more detailed information. Below the logic diagnostics toolbanner 814, the logic diagnostics tool window 812 displays the detailedresults 818 of the logic diagnostics run.

Similarly, when the tags tab 804 is selected, the primary window 206updates to display the various tags assigned to the selected component.When the HMI tab 806 is selected, the primary window 206 displaysinformation about the HMI associated with the selected component andinteractions between the selected component and the HMI. When the alarmstab 808 is selected, the primary window 206 displays information aboutthe various alarms associated with the selected component.

A user may also select multiple objects in the explorer window 204 tocreate a split screen view within the primary window 206. FIG. 29 is ascreenshot of the dashboard 200 in a split screen view. As shown, a maindisplay 850 of a distillation visualization has been selected, as wellas a totalizer routine 852 within the distillation process. Accordingly,the primary window has been split into a first subwindow 854, whichshows details of the main display 850, and a second subwindow 856, whichshows details of the totalizer routine 852, as if each component/objecthas been chosen individually and detailed information for the chosencomponents are displayed within the primary window 206. Though theprimary window 206 is divided into two subwindows in the embodimentshown in FIG. 29 , it should be understood that, in some embodiments,the primary window 206 may be divided into 3, 4, 5, 6, 7, 8, 9, 10, orany suitable number of subwindows. In such an embodiment, all of thesubwindows may not be able to fit within a single screen, the user maybe able to scrolls through the various subwindows. Similarly, eachsubwindow 854, 856 may include a row of tabs 858, each corresponding toa selected component, such that a user may toggle the view displayed bya subwindow 854, 856 by selecting a tab from the row of tabs 858.Further, in some embodiments, the various subwindows 854, 856 of theprimary window 206 in split-screen mode may be capable of displayingdifferent view types simultaneously. For example, the first subwindow854 may display in a logical view while the second subwindow 856displays in a network view.

Manipulating Existing Projects

Creating areas for a project was shown and described with regard to FIG.13 . Though the areas in FIG. 13 (e.g., first reel area, guide rollarea, press area, second reel area) were created before any objects weredragged into the design window 550 of the primary window 206, areas mayalso be added and/or adjusted in projects that already have one or moreobjects in the design window. FIG. 30 is a screenshot of the dashboard200 that illustrates the creation of areas for an existing project. Asshown, a drawing tool has been used to draw lines, forming closedshapes, that define one or more areas of an existing project.Specifically, the user has used a drawing tool to draw closed shapesthat define a preparation area 900, a milling area 902, and a dispatcharea 904. The drawing tool may allow the user to select from a menu ofstandard shapes, including circles, ovals, triangles, squares,rectangles, diamonds, parallelograms, pentagons, hexagons, heptagons,octagons, nonagons, decagons, or any other polygon. Further, the usermay draw other shapes by defining points, which may then be connectedwith straight lines. In some embodiments, the drawing tool may alsoallow users to add curved lines. After area-defining shapes are drawn,the system may identify objects that are not entirely within the linesof a shape defining an area. If an object is not entirely within anarea's shape, the system may determine the extent to which the objectlies within the area (e.g., is the object mostly inside the area ormostly outside the area?), and consider the extent to which the objectinteracts with other objects within the area to determine whether or notthe object should be considered within the area. In some embodiments,the use of areas may be used to define or designate networks orsubnetworks. Further, in some naming conventions, the area in which anobject is located, or the role an object plays in an area may help todefine the name given to an object.

The dashboard 200 may also be used to generate and/or edit tags for aproject. FIG. 31 is a screenshot of the dashboard 200 in a tag editingmode. As shown, when a tags/parameters item 950 is selected from theexplorer window 204, the primary window 206 updates to display atags/parameters editing window 952. From the tags/parameters editingwindow 952, a user may add and/or edit tags/parameters associated with aselected component.

A tag is a text-based name for an area of a component's memory in whichspecific data is sported. Thus, creating a tag is somewhat like creatinga partition within the memory. Before tags, data location was identifiedby an network or memory address. Thus, using tags within a project is amechanism for allocating memory of components within the system.Typically, the amount of memory allocated to a tag varies from tag totag, but is at least four bytes. As shown, the tags/parameters editingwindow 952 includes a tag table 954 that lists the tags associated witha selected component. Within the tag table 954, each tag occupies a row.The row may include various data fields that define or describe the tag.For example, in the embodiment shown in FIG. 31 , the data fieldsinclude name, value, style, data type, tag description, history, andalarms. The tag name may be generated by a user or automaticallygenerated. Similarly, the description may be a string provided by a useror automatically generated by the system. The data type may include oneof several options including REAL (e.g., for floating point numbers,such as provided by an analog device in floating point mode), INT (e.g.,for an analog device in integer mode), STRING (e.g., for a string ofASCII characters), BOOL (e.g., for bits and/or digital I/O points),COUNTER (e.g., for a counter), DINT (for whole number integers), CONTROL(e.g., for sequencers), TIMER (e.g., for timers), and so forth. To add atag to a component, a user may fill in the open fields at the bottom ofthe tag table 954. To add a tag, the user may provide an alpha-numericcharacter string for each field, select from a drop down menu, enter anumber value, etc.

As shown in FIG. 31 , the tags/parameters editing window 952 may alsoinclude a parameters table 956 and a child table 958. The parameterstable 956 may define one or more parameters associated with the selectedcomponent, such that each row corresponds to a parameter and may includemultiple fields that describe and/or define the parameter. In someembodiments, parameters may be used to further define tags. The childtable 958 lists child instances of the selected component. If theselected component is a child of another component, in some embodiments,the parent component may also be displayed, either in the child table958 or in a separate parent table (not shown).

The dashboard 200 may also be used to add logic to an existing projector a component within an existing project. FIG. 32 is a screenshot ofthe dashboard 200 in a logic editing mode. As shown, when a logic item1000 is selected within the explore window 204, in the instantembodiment, for an agitator object, the primary window 206 updates todisplay a logic window 1002. Within the logic window 1002, a pop-upwindow 1004 may be displayed that allows a user to select how he or shewould like to add logic. As shown, from within the pop-up window 1004, auser may choose to add ladder logic, add a structured text file, add afunction block file, or add an SFC file. It should be understood,however, that the options for adding logic in the pop-up window 1004 aremerely examples and not intended to be limiting. Accordingly, other waysfor adding logic to a project or component are also envisaged. Uponmaking a selection within the pop-up window 1004, the dashboard 200 mayguide the user through adding the ladder logic or locating and importingthe appropriate file.

Suggesting Components

The ability of the dashboard 200 to use historical data to suggestconnections between components is shown and described above withreference to FIG. 18 . The dashboard 200 may also use historical data tosuggest specific components within a project based on the other objectsalready in a project. FIG. 33 is a screenshot of the dashboard 200 inwhich the system is suggesting controllers for the cookie making projectof FIGS. 24-27 . In FIGS. 24-27 , the industrial controllers 20 wereshown with the generic label CLX. As shown in FIG. 33 , the system maybe configured to analyze the instant project, as well as historical data(e.g., previous projects from the designer, the designer team, thecustomer, and/or one or more other customers) to suggest specific CLXindustrial controller 20 models for the project. As shown, when thesystem suggests one or more components, the dashboard 200 updates todisplay a suggestion notification banner 1050, which notifies the userthat one or more suggestions are being made, and allows the user toaccept or discard the suggestions individually or in bulk. Additionally,the dashboard may display a suggestion pop-up window 1052 over one ormore of the objects. The suggestion pop-up window 1052 allows a user toaccept the suggestion, reject the suggestion, see more information aboutthe suggested object, and/or view object preferences. Suggestions may beused based on historical data (e.g., frequently used combinations ofparts in past designs from the historical data set). For example, thesystem may recognize that the designer has used three specific objectsin an area and determine that the combination of objects is typicallyused with a fourth object. The system may then suggest the fourth objectvia the dashboard 200. Further, the system may also suggest componentsbased on an anticipated load and suggest specific products based ontheir known specifications. For example, a designer may have placed ageneric controller 20 in a project. Based on the components connected tothe controller, the system may be able to determine an anticipated loadon the controller, as well as the number and type of components withwhich the controller 20 is designed to interface. The system may thenreference specifications for known products and recommend a specificproduct that is well suited in the project. In some embodiments, thesystem may utilize machine learning to analyze trends in historical dataand/or catalogs of available components in order to generate thesuggestions.

In some embodiments, the about object option may send a user to awebsite for the vendor of the object. The about object option may alsoprovide contact information for the vendor of the object and provide theuser with guideline as to how to purchase the object, if a purchase isappropriate. Further, the object preferences option may allow a user todefine his or her preferences with regard to certain objects, such aspreferred vendors, preferred models, budgets, preferred programminglanguages, compliance with preferred standards, preference for objectsdesigned for specific industries, etc. In other embodiments, the objectpreferences option may allow a user to view and edit the settings for agiven object. When multiple objects are suggested, as is the case inFIG. 33 , the suggestion pop-up windows 1052 for each suggestion mayappear simultaneously, or one at a time, as each suggestion is acceptedor discarded by the user. Further, a user may have the option to hold asuggestion and put off making a decision on the suggestion in order tofurther consider the suggestion. In the instant embodiment, the systemhas suggested a CLX L83 controller 20 in the mixer area 700 and the ovenarea 702, whereas a CLX L85 controller 20 was suggested for the packerarea 704 and the wrapper area 706. In some embodiments, the dashboard200 may present each suggested instance of an object as a separatesuggestion. In other embodiments, all instances of a suggested componentmay be treated as a single suggestion (i.e., all suggested CLX L83controllers are a single suggestion and all CLX L85 controllers are asingle suggestion).

As shown in FIG. 33 , the suggested objects are displayed within thedesign window 550 in an emphasized (e.g., bolded, flashing, color coded,etc.) or deemphasized (e.g., greyed out, dotted lines, etc.) fashionrelative to the other components. Upon acceptance of the suggestions,the suggested objects are added to the project and the appearance of thesuggested objects is updated to match the other objects in the project.FIG. 34 is a screenshot of the dashboard 200 in which the controllersuggestions have been accepted (e.g., via user input) and thecontrollers are being added to the project. As shown, the CLX L83controllers and the CLX L85 controllers have been added to the projectand are shown in the same style as the other objects in the project.

In the embodiments shown and described with regard to FIGS. 33 and 34 ,the system suggested specific models of objects where genericplaceholders for those objects existed within the project. However, insome embodiments, the system may also suggest new objects to add to theproject. FIG. 35 is a screenshot of the dashboard 200 in which anadditional motion control module 1100 has been suggested for the wrapperarea 706. Though a generic motion control module 1100 has been suggestedin FIG. 35 , in some embodiments, the system may suggest specific modelsof objects. Though in the embodiments shown in FIGS. 33-35 , thesuggested objects are hardware components, it should be understood thatthe system may be configured to suggest that other objects be added tothe project that are not necessarily hardware components, such asroutines, software components, logic, alarms, timers, processes, etc.

In some embodiments, the system may also recognize when a component of aproject has reached, or will soon reach, the end of its suggested lifecycle, has become, or is expected to become, obsolete for lack ofsoftware/firmware updates, or has otherwise become an end of lifeproduct. In such a situation, the system may generate an end of lifenotification and suggest a replacement product. FIG. 36 is a screenshotof the dashboard 200 displaying an end of life notification 1102. Asshown, when an end of life product is recognized, the system maydeemphasize (e.g., grey out) the other objects in the area and attach anend of life notification 1102 to the end of life product. Further, thedashboard 200 may also display an end of life pop-up window 1104. Theend of life pop-up window 1104 may display that the identified componentis an end of life product and suggest a replacement product, identifiedbased on the existing designed system, to interconnect with the existingcomponents with minimal programming. In some embodiments, the pop-upwindow 1104 may include a hyperlink to website for the product, whichmay allow the user to order the product, or contact information for avendor of the product. In instances in which the product is availablefrom multiple vendors, the system may compare prices for the productfrom multiple vendors. The system may also apply an algorithm or one ormore rules to confirm the compatibility of the suggested product withthe rest of the components in the area and/or project.

The system may also detect when known hardware components havedisconnected from the network and when new hardware components haveconnected to the network. FIG. 37 is a screenshot of the dashboard 200showing a disconnected component and a new unconfigured component. Inthe instant embodiment, the CLX controller 20 in the packer area 704 hasbeen disconnected from the network and a new unconfigured CLX controllerhas been connected to the network in its place. The system hasrecognized that the known CLX controller 20 in the packer area 704 hasbeen disconnected from the network. Accordingly, the objectcorresponding to the CLX controller 20 in the packer area 704 has beendeemphasized (e.g., greyed out) and a notification 1106 has beengenerated to communicate to the user that the component has beendisconnected from the network. Further, an object corresponding to thenew unconfigured CLX controller 20 appears floating above the variousareas 700, 702, 704, 706 of the project. The object corresponding to thenew unconfigured CLX controller 20 also includes a notification tonotify that the new CLX controller has been connected to the network,but not configured. A notification window 1110 also appears, indicatingthat an unconfigured controller 20 has been attached to the network andgiving the user the option to configure the new CLX controller byselecting a configure button 1112. Upon selection of the configurebutton 1112, the system may walk the user through configuring the newpiece of hardware. During the configuration process, the system mayupdate the dashboard 200 to replace the object associated with the oldCLX controller 20 with the object for the new CLX controller 20.However, in some embodiments, the system may recognize that a componenthas been disconnected and that a new unconfigured component has beenconnected in its place. Accordingly, the system may skip the dashboard200 view shown in FIG. 37 and assume that the new component replaces theold component and that the user wants to configure the new component.

FIG. 38 shows new replacement CLX controller 20 in the packer area 704in place of the old CLX controller 20. As shown, the new replacement CLXcontroller 20 has been emphasized via highlighting, however other formsof emphasis (e.g., bold lines, color coded, flashing, notification,etc.) are also envisaged. The dashboard 200 updates the accessorywindows 208 to display an object properties window 1114. Within theobject properties window 1114, the dashboard 200 displays a directreplacement box 1116 that enables the user to provide inputs statingwhether or not the new component is a direct replacement for thedisconnected component. If so, the system may assign configurations forthe old component to the new component.

Simultaneous Edits by Multiple Users

As described above with regard to FIG. 2 , in some embodiments, ratherthan being stored locally on a computing device, industrial automationprojects may be hosted by an on-premises (on-prem) server, a remoteserver, a private cloud network, a public cloud network, or some otherway that is simultaneously accessible by multiple users. Accordingly,the dashboard 200 may be configured to facilitate two or more peopleaccessing and editing the project simultaneously. FIG. 39 is ascreenshot of the dashboard 200 showing multiple people editing atotalizer routine simultaneously. When multiple people are editing anaspect of a project simultaneously, a notification 1150 may appear toinform the users that multiple people are editing an aspect of theproject. As shown in FIG. 39 , the notification 1150 may include thenumber of users editing the aspect of the project. Further, in someembodiments, when a user selects the notification 1150, a pop-up window1152 may appear identifying which users are editing the project. Thedashboard 200 may allow the users simultaneously editing a project tosend messages to one another. FIG. 40 is a screenshot of the dashboardillustrating users sending messages to each other. As shown, whenmultiple users are editing a project simultaneously, the users mayexchange messages via a chat window 1154. In some embodiments, the chatwindow 1154 may allow two users to exchanges messages. However, in otherembodiments, the chat window 1154 may have more extensive capabilities,such as allowing users to assign tasks to each other and referencespecific modifications to the project. Further, in some embodiments, themessages may appear as comments coupled to specific portions of theproject. As shown in FIG. 40 , these comments may appear as a commentnotification 1156, which a user may select to open a larger chat window1154.

In some embodiments, multiple users may be editing a master copy of theproject, which is hosted by an on-premises (on-prem) server, a remoteserver, a private cloud network, a public cloud network, or some otherway that is simultaneously accessible by multiple users, and updated inreal time or near real time (e.g., within seconds of an edit beingmade). However, in some embodiments, a user's computing device may makea local copy of the project to edit rather than working from the master.Differences or conflicts between the master and the local copy may beconsidered at set intervals (e.g., seconds, minutes, hours, days), orupon some triggering activity (e.g., certain number of changes made,user selects save button, or requests to sync master and local copy,when a user closes their local copy, etc.). Upon noticing one or moreconflicts, the user may be prompted as to how to deal with the realizedconflicts. FIG. 41 is a screenshot of the dashboard 200 in which a userhas been prompted as to how they would like to resolve conflicts. Asshown, a conflict pop-up window 1158 may open, presenting multipleoptions for resolving the identified conflicts. For example, the optionsmay include merging the local file with the master version 1160,ignoring the changes to the local version 1162, and pushing the changesto the local version to the master version 1164. In some embodiments,after the user has made a selection, the dashboard may display mockupsof the changes for the user to consider. FIG. 42 is a screenshot of thedashboard 200 displaying three mockups. In the illustrated embodiment,the user has selected to merge his or her changes with the masterversion. Accordingly, the dashboard presents three windows: a localversion 1166, a merger version 1168, and a mockup of what the updatedmaster version would look like if user proceeds with the selectedoptions. The mockups assist the user in understanding the possibleramifications of their chosen action before implementing it.Accordingly, the dashboard may include a cancel button 1172 to stop thechosen action return to the previous screen, and a finish button 1174 toproceed with the chosen action.

Retrospective Project Code File Analysis

As discussed with regard to FIGS. 18, 19, and 33-38 , rule sets,algorithms, and historical data may be used to analyze projects in realtime, near real time, at set time intervals, or upon the occurrence oftriggering events, during design of a project, to discourage users fromdesigning systems that do not follow certain guidelines and/orgenerating recommendations for adding objects and/or connections as theuser designs a project. However, in some embodiments, the system mayalso analyze completed project code files. FIG. 43 is a flow chart of aprocess 1200 for analyzing a project code file. As shown, in block 1202,the project code file is received or retrieved from some suitablestorage component. In some embodiments, the project code file may besent or uploaded by a customer. In other embodiments, the customer mayprovide a hyperlink to the project code file, or otherwise identify alocation of the project code file. At block 1204, the rules and/oranalysis algorithms are received or retrieved. The rules and/or analysisalgorithms may define guidelines and/or best practices for project codefiles. In some embodiments, there may be multiple sets of rules and/oranalysis algorithms that may be used. Selection of a specific set ofrules and/or analysis algorithms may be performed by the customer orbased on one or more characteristics of the project code file (e.g.,industry, application, size of project code file, etc.). At sub-process1206, the sets of rules and/or analysis algorithms are applied to theproject code file to analyze the project code file, for example, viastatic code analysis.

For example, as shown in FIG. 43 , the sub-process 1206 may include acollection of blocks that represent different aspects of the analysis.It should be understood, however, that the blocks shown in FIG. 43 aremerely exemplary and that the sub-process 1206 may include only some ofthe blocks shown in the sub-process 1206, may include differentcombinations of blocks in the sub-process 1206, may include the blocksshown in sub-process 1206, but in a different order, or may includeadditional blocks not shown in FIG. 43 .

At block 1208, the system may analyze the project code file to identifyits code structure. This may include, for example, recognizing thelarger portions of the code, as well as identifying modules of code,loops, interactions between portions of code, etc. For example, thesystem may suggest alternate structures for certain portions of theproject code file, such as suggesting an if, then, else structure. Ininstances in which the project code file was written by a person who isno longer available (e.g., departed employee, contractor, employee ofthird party hired to develop the project code file), identifying thestructure of a project code file may help an owner of the project codefile to understand how the project code file is constructed. At block1210, the system may generate one or more visualizations of the projectcode file. The visualizations may include, for example, a map of dataflow within the project code file, a call graph, etc.

At block 1212, the system may identify dead code within the project codefile. For example, the system may find portions of code within theproject code file that are not run because of how the code is written(e.g., portions of code are not called upon). Further, in block 1214,the system may identify dead ends in the project code file. If thesystem finds portions of dead code or dead ends within the project codefile, the system may suggest one or more steps for addressing the deadcode or dead ends. In block 1216, the system may identify improper orinefficient tag usage within the project code file. If the system findsimproper or inefficient tag usage, the system may suggest one or moresteps for addressing the improper or inefficient tag usage. In block1218, the system identifies overlapping and/or concurrent tasks withinthe project code file and determines whether those tasks should beseparated and how to go about separating the overlapping and/orconcurrent tasks. At block 1220, the system considers whetherconnections between components are valid. That is, the system consideredwhether connections between components comply with one or more sets ofrules or guidelines. If one or more connections are found to be invalid,the system may recommend one or more steps for bringing the one or moreconnections into compliance with the one or more sets of rules orguidelines. At block 1222, the system identifies overload situations fora component or a group of components (e.g., when a component is runningtoo many processes simultaneously) and provides suggestions foraddressing the overload situations.

At block 1224, the system calculates a code complexity score for theproject code file. Calculating the code complexity score may includeapplying an algorithm to determine a single numerical value thatrepresents the complexity of the project code file. It should beunderstood, however that the project code file analysis in sub-process1206 may include calculating other scores for the project code file thatascertain, for example, the extent to which the project code filecomplies with various rules or guidelines, such as, well-organizedstructure, lack of dead code and dead ends in code, efficiency of tagusage, amount of parallel overlapping/concurrent tasks, lack of overloadsituations, etc. Accordingly, in some embodiments, calculating the codecomplexity score may utilize the results of other blocks within theproject code file analysis sub-process 1206. At block 1226, the systemdetermines whether the project code file meets an acceptance criteria.The acceptance criteria may include one or more sets of rules orguidelines that define best practices for project code files. In someembodiments, the output of whether the project code file meets theacceptance criteria may be a binary yes/no, pass/fail, etc. However, inother embodiments, the output may include a selection of one or multiplegradations, such as letter grades, poor/satisfactory/good/excellent,etc. In further embodiments, the output of whether the project code filemeets the acceptance criteria may be a numerical score. However, otherembodiments for the output of whether the project code file meets theacceptance criteria are also envisaged.

At block 1228, the system generates and outputs a report summarizing theanalysis of the project code file sub-process 1206. Accordingly, thereport may include results from blocks within the sub-process 1206, aswell as other information. The report may be displayed within thedashboard, within a different GUI, output as a PDF, or provided in someother fashion. At block 1230, data from the analysis sub-process 1206may be added to a database or other store of historical data, where thedata may be further analyzed. At block 1232, data collected fromanalyzing the project code file, as well as other project code files maybe used to update the rules and/or analysis algorithms. Updating therules and/or analysis algorithms may occur at set intervals (e.g.,daily, weekly, monthly, quarterly, annually, etc.), upon some triggeringevent (e.g., threshold number of project code files analyzed, a requestto update rules and/or analysis algorithms, change in processes, etc.).

Alerts

FIG. 44 is a screenshot of the dashboard 200 displaying an alarmnotification 1250 and an alarm pop-up window 1252. As described above,the dashboard 200 is configured to display notifications to a user whenin the design-time environment. In some embodiments, the notificationsmay include alarms. For example, if an industrial automation process isrunning while a user is editing the corresponding project within thedesign-time environment, and alarms are generated, the alarms may appearas notifications 1250 within the dashboard 200. As shown, the industrialcontrollers 20 in the oven area 702 and packer area 704 both haveoutstanding alarm notifications 1250 adjacent to the respective icons.Further, as shown in FIG. 44 , in some embodiments, when one or morecomponents have outstanding alarm notifications 1250, the other objectsin the project may be deemphasized (e.g., greyed out) within thedashboard 200. Further, the dashboard 200 may also display the alarmpop-up window 1252, which brings the user's attention to the outstandingalarm. The user may select a view button 1254 to display moreinformation about the alarm notification. When the view button 1254 isselected, the dashboard 200 may update to display an alarm summaryscreen. FIG. 45 is a screenshot of the dashboard 200 displaying an alarmsummary screen 1256. As shown in FIG. 45 , the alarm summary screen 1256occupies the primary window 206 of the dashboard and displays anexpandable and collapsible list of alarms 1258. The list of alarms 1258includes a banner 1260 for each alarm, which displays the associatedobject, a priority level for the alarm (e.g., low, medium, high,urgent), and a message associated with the alarm. Selecting the banner1260 for an alarm opens a window that displays information about theselected alarm. For example, the information may include the priority, aseverity score, an in-alarm time, an event time, and the message. Thepriority level reflects the determined urgency of the alarm (e.g., thedegree to which timely resolution of the alarm will reduce the impact ofthe underlying issue). The severity score may be a value (e.g., 1-100)that conveys the extent of the ramifications of the underlying issue onthe industrial automation system if the issue goes unaddressed. Further,the alarm summary screen 1256 may include a row of tabs 1264 for eachexpanded alarm that control what is shown in a content window 1266. Thetabs may include, for example, HMI, code, trend, manuals, etc. The whenthe HMI tab is selected, the content window 1266 may display items beingdisplayed in the HMI screen. In some embodiments, the user may interactwith buttons recreated from the HMI screen within the content window1266 as if the user were holding an HMI. Selection of the code tab maycause the content window 1266 to be updated to display code associatedwith the affected object or component. The user may then make edits tothe code within the content window 1266. Selection of the trend tab maycause the content window 1266 to be updated to display a graph of avalue or metric over time and whether the value is above or below anaverage or some desired target for the value or metric. Selection of themanuals tab may cause the content window 1266 to be updated to displayhyperlinks to the manuals of the components or objects experiencing thealarm. In other embodiments, the one or more relevant manuals may beembedded within the content window 1266.

In some embodiments, the system may reference historical data and makeone or more suggestions as to how to address the alarm. For example, thesystem may utilize machine learning or artificial intelligence trainedbased on collected historical data. The system may recognize that thesame or similar situation has occurred in the past and been resolved.The system may recognize the solution that worked previously and suggestthe solution to a user. The system may provide instructions forimplementing the suggested solution, or provide the user with an optionto automatically implement the suggested solution. In some embodiments,where multiple possible solutions are available, the system may presentmultiple possible solutions. In further embodiments, the system may beconfigured to evaluate and rank the possible solutions. The system mayprovide, for example, a predicted likelihood of success for eachpossible solution.

Light Engineering Client

As described above with regard to FIGS. 3 and 4 , a light engineeringclient environment may provide an operator with a run-time styleenvironment, but with limited functionality of the design-timeenvironment for troubleshooting and/or making adjustments to anindustrial automation system. FIGS. 46-48 illustrate various aspects ofthe light engineering client. Specifically, FIG. 46 shows a home screenof a light engineering client dashboard 1300 as displayed on an HMI 30.It should be understood, however, that the light engineering client maybe displayed on any computing device. As shown, the dashboard 1300includes an explorer window 1302, a connected components window 1304,and a primary window 1306. As with the explorer window of thedesign-time environment, the explorer window 1302 includes an expandableand collapsible list of components and objects associated with the HMI30. As a user navigates the explorer window 1302, selections from theexplorer window 1302 may dictate what is displayed in the primary window1306. The connected devices window 1304 displays information associatedwith one or more devices connected to the HMI 30. The information mayinclude, for example, whether the component is online, a state of thecomponent, whether there are any notifications associated with thecomponent, etc.

The data window 1308 may be configured to display data associated withone or more connected components or objects. In some embodiments, thedata may be displayed via one or more visualizations. In otherembodiments, the data may be displayed via one or more scores. What isdisplayed within the data window 1308 may also be customizable by theoperator. The devices window 1310 displays one or more devicesassociated with the HMI 30 and may include one or more pieces ofinformation for the one or more devices. The system model window 1312may list one or more models associated with the HMI 30, which the usermay select to view the selected model. The alarm window 1314 displays alist of alarms experienced by the HMI 30, or components associated withthe HMI 30.

The home screen of the light engineering client dashboard 1300 may bevisible when a home screen tab 1316 has been selected. Selection of analarm tab 1318 may cause the primary window 1306 to update to displayinformation associated with one or more alarms. FIG. 47 is a screenshotof the light engineering client dashboard 1300 when the alarm tab 1318has been selected. As shown, when the alarm tab 1318 has been selected,the dashboard 1300 updates the primary window 1306 to display an alarmlisting window 1320 and an alarm details window 1322. The alarm listingwindow 1320 lists the alarms relevant to the HMI 30 or any componentsassociated with the HMI 30. Upon selection of an alarm within the alarmlisting window 1320, the alarm details window 1322 updates to displayinformation associated with the selected alarm. For example, the alarmdetails window 1322 may display an alarm priority, an alarm severity, anin-alarm time, an event time, an alarm message, a location of theassociated component, a parameter in question, as associated controller,a path, a trend of the value in question, hyperlinks to manuals for therelevant components, and tabs to display associated code and to the HMIscreen.

In some embodiments, the user may minimize the explorer window 1302 andthe connected devices window 1304 such that the primary window 1306occupies the entirety of the HMI screen 30. FIG. 48 is a screenshot ofthe light engineering client dashboard 1300 when the explorer window1302 and the connected devices window 1304 have been minimized. Asshown, the alarm details window 1322 includes a row of tabs 1324. Thetabs may include, for example, code and HMI. When the HMI tab isselected, the content screen 1326 may display information associatedwith the HMI 30. Selection of the code tab may cause the content window1326 to be updated to display code associated with the affected objector component. The light engineering client dashboard 1300 may receiveinputs from the user making modifications to the code, similar to thedesign-time environment, to address the alarm. As previously discussed,the light engineering client environment may be similar to the run-timeenvironment, but with added functionality from the design environment,allowing the operator to make modifications to the code to makeadjustments to the industrial automation system and/or to address alertsand alarms. For example, the light engineering client environment mayallow an operator to adjust target or threshold values for certainparameters (within a specified range set by the designer), switchparameters to check different sensors, change time periods, change inputvalue, etc.). In contrast, the design-time environment allows a user tochange the function of analysis, change analysis algorithms, etc. Insome embodiments, the added functionality from the design environmentmay be limited in scope as compared to the full functionality availablein the design-time environment.

In some embodiments, the system may be configured to referencehistorical data and make one or more suggestions as to how to addressthe alarm. For example, the system may utilize machine learning orartificial intelligence trained based on collected historical data. Thesystem may recognize that the same or similar situation has occurred inthe past and been resolved. The system may recognize the solution thatworked previously and suggest the solution to a user. The system mayprovide instructions for implementing the suggested solution, or providethe user with an option to automatically implement the suggestedsolution. In some embodiments, where multiple possible solutions areavailable, the system may present multiple possible solutions. Infurther embodiments, the system may evaluate and rank the possiblesolutions. The system may provide, for example, a predicted likelihoodof success for each possible solution.

The disclosed techniques include applying a set of industrial automationsystem design rules to determine whether each action taken by a designer(e.g., adding an object to a project, drawing connections betweenobjects, etc.) is allowed by the rules. The rules may act as “designguardrails” to help designers design better systems more efficiently,avoiding long periods of time spent troubleshooting. In some cases,designers may be entirely prevented from taking prohibited actions,whereas in other cases, designers having certain specified credentialsmay be able to override the warning message that a given design actiondoes not follow the guidelines.

The disclosed techniques also include using AI and/or machine learningto consider actions taken by a designer in view of previous designs andknown component specifications to suggest design actions, which thedesigner may accept or reject. Suggestions may include, for example,using specific models of components, adding connections betweencomponents, inserting additional components, replacing end of lifecomponents with replacement components, and so forth. When an action issuggested, the designer may choose whether to accept the suggestion ordismiss the suggestion. In some cases, the system may also provide thedesigner with contact information or hyperlinks to vendors ormanufacturers of the suggested component, or other avenues to purchasethe suggested component.

Further, the disclosed techniques include using AI and/or machinelearning to analyze a historical data set, identify when the instantissue has been encountered before, and suggest a remedial action to thedesigner. For example, the system may recognize that a problem has beenencountered and use a historical data set to identify when the problemhas been encountered in the past. The system may then consider what wasdone in those previous occurrences to remedy the problem. The system maythen identify one or more possible remedial actions to address theproblem. In some cases, the system may rank or otherwise evaluate thepossible remedial actions to identify a likelihood of success for eachpossible remedial action. The system may then suggest one or more of theremedial actions to the designer. For example, the system maycommunicate to the designer, “The last time this problem occurred, wetook this remedial action.” In some cases, the designer may have theoption to automatically implement the suggested remedial action, seeinstructions for manually implementing the suggested remedial action, ordismiss the suggestion.

The disclosed techniques include a light engineering client environment,which is similar to a run-time environment, but includes somefunctionality of the design-time environment, allowing operators to makeminor adjustments to an industrial automation system to resolve minorissues. In some embodiments, the light engineering client may also becapable of providing recommendations for how to resolve issues thatarise.

The disclosed techniques further include using component libraries thatinclude objects that are programmed to interact with one another inknown ways. Accordingly, the designer may drag components from a libraryinto a design window, and the system may understand how the componentsare intended to interact with each other. The system may automaticallyarrange components and connect the components accordingly to how theyare frequently implemented. Each component in a library may have arespective portion of code that defines the operation of the respectivecomponent. Based on how the components are arranged and connected in thedesign window, the system may then generate or modify program code forthe components so the designer is not burdened with writing the code forthe system.

The disclosed techniques include using AI and/or machine learning tolearn new naming conventions and propagate the new naming conventionthrough one or more industrial automation systems and/or libraries, andto automatically adjust component names to maintain a naming conventionwhen components are added, removed, or rearranged within the system.

The disclosed techniques include a project code file analysis algorithmthat may be applied to project code files and generate a report for theproject code file. The project code analysis algorithm may be configuredto determine a structure of the project code file, create avisualization of the project code file, identify dead code (i.e., codethat is not executed) within the project code file, identify dead endswithin the project code file, identify inefficient tag usage, identifyparallel concurrent tasks, consider the validity of connections betweencomponents, identify overload situations, calculate a complexity scorefor the code, determine whether the project code file meets anacceptance criteria, and so forth. Further, once the project code filehas been analyzed, a database may be updated with data from theanalysis. As the database is populated with data from analyzing numerousproject code files, adjustments may be made to the project code analysisalgorithm, such that the project code analysis algorithm improves overtime.

While only certain features of the present disclosure have beenillustrated and described herein, many modifications and changes willoccur to those skilled in the art. It is, therefore, to be understoodthat the appended claims are intended to cover all such modificationsand changes as fall within the true spirit of the embodiments describedherein.

The invention claimed is:
 1. A non-transitory, tangible,computer-readable medium comprising instructions that, when executed bya processor, causes the processor to perform operations comprising:receiving first portion of code, wherein the first portion of code isassociated with one or more operations of an industrial automationsystem during performance of an industrial automation process, whereinthe first portion of code is a part of a first project code file thatdefines the one or more operations of a plurality of industrialautomation devices within the industrial automation system; retrieving aset of rules defining guidelines for a plurality of portions of code,including the first portion of code; performing a first analysis of thefirst portion of code based on the set of rules; determining whether thefirst portion of code meets an acceptance criteria based on the firstanalysis; generating a first visualization based on the first analysis;adding data generated during the first analysis to a historical dataset;training a machine learning algorithm based on the historical dataset,including the data generated during the first analysis; updating the setof rules via the trained machine learning algorithm; receiving a secondportion of code that is a part of a second project code file; performinga second analysis of the second portion of code based on the updated setof rules; determining whether the second portion of code meets theacceptance criteria based on the second analysis; and generating asecond visualization based on the second analysis.
 2. Thenon-transitory, tangible, computer-readable medium of claim 1, whereindetermining whether the first portion of code meets the acceptancecriteria comprises comparing a number of rules satisfied by the firstportion of code to a threshold number of rules.
 3. The non-transitory,tangible, computer-readable medium of claim 1, wherein generating thefirst visualization comprises generating a recommendation based on thefirst analysis.
 4. The non-transitory, tangible, computer-readablemedium of claim 1, wherein: generating the first visualization comprisesgenerating a report based on the first analysis; and determining whetherthe first portion of code meets the acceptance criteria comprisesgenerating a numerical score associated with the acceptance criteria,wherein the report comprises the numerical score.
 5. The non-transitory,tangible, computer-readable medium of claim 1, wherein performing thefirst analysis comprises identifying a replacement object for one ormore objects identified within the first portion of code.
 6. Thenon-transitory, tangible, computer-readable medium of claim 1, whereinperforming the first analysis comprises identifying one or moreinstances of tag usage, wherein each instance of tag usage correspondsto a location of data associated with an industrial object.
 7. Thenon-transitory, tangible, computer-readable medium of claim 1, whereinperforming the first analysis comprises identifying one or more portionsof unutilized code within the first portion of code.
 8. Thenon-transitory, tangible, computer-readable medium of claim 1, whereinperforming the first analysis comprises identifying one or more deadends within the first portion of code.
 9. The non-transitory, tangible,computer-readable medium of claim 1, wherein performing the firstanalysis comprises calculating a code complexity score for the firstportion of code.
 10. The non-transitory, tangible, computer-readablemedium of claim 9, wherein calculating the code complexity scorecomprises applying a code complexity algorithm to determine a complexityof a structure of the first portion of code.
 11. A method, comprising:receiving a first portion of code, wherein the first portion of codecorresponds to one or more operations of an industrial automation systemduring performance of an industrial automation process, wherein thefirst portion of code is a part of a first project code file thatdefines the one or more operations of a plurality of industrialautomation devices within the industrial automation system; selecting aset of rules from a plurality of rules based on the first portion ofcode, wherein the rules define guidelines for the first portion of code;performing a first analysis of the first portion of code based on theset of rules; comparing the first analysis of the first portion of codeto an acceptance criteria; generating a first visualization based on thefirst analysis; adding data generated during the first analysis to ahistorical dataset; training a machine learning algorithm based on thehistorical dataset, including the data generated during the firstanalysis; updating the set of rules via the trained machine learningalgorithm receiving a second portion of code that is a part of a secondproject code file; performing a second analysis of the second portion ofcode based on the updated set of rules; comparing the second analysis ofthe second portion of code to the acceptance criteria; and generating asecond visualization based on the second analysis.
 12. The method ofclaim 11, wherein comparing the first analysis of the first portion ofcode to the acceptance criteria comprises generating a numerical scoreassociated with the acceptance criteria.
 13. The method of claim 11,wherein generating the first visualization comprises generating arecommendation based on the first analysis, wherein the recommendationcomprises generating a third portion of code corresponding to at leastone object of the industrial automation system, at least one connectionof the industrial automation system, or both.
 14. The method of claim11, wherein performing the first analysis comprises validating one ormore connections between components of the industrial automation system.15. A non-transitory, tangible, computer-readable medium comprisinginstructions that, when executed by a processor, causes the processor toperform operations comprising: retrieving a set of rules definingguidelines for a first portion of code, wherein the first portion ofcode corresponds to one or more operations of an industrial automationsystem during performance of an industrial automation process, whereinthe first portion of code is a part of a first project code file thatdefines the one or more operations of a plurality of industrialautomation devices within the industrial automation system; performing afirst analysis of the first portion of code based on the set of rules;comparing the first analysis of the first portion of code to anacceptance criteria; generating a first visualization based on the firstanalysis; adding data generated during the first analysis to ahistorical dataset; training a machine learning algorithm based on thehistorical dataset, including the data generated during the firstanalysis; updating the set of rules via the trained machine learningalgorithm receiving a second portion of code that is a part of a secondproject code file; performing a second analysis of the second portion ofcode based on the updated set of rules; comparing the second analysis ofthe second portion of code to the acceptance criteria; and generating asecond visualization based on the second analysis.
 16. Thenon-transitory, tangible, computer-readable medium of claim 15, whereinthe operations comprise selecting the set of rules based oncharacteristics of the first portion of code.
 17. The non-transitory,tangible, computer-readable medium of claim 15, wherein retrieving theset of rules comprises receiving an input corresponding to a selectionof the set of rules.
 18. The non-transitory, tangible, computer-readablemedium of claim 15, wherein the machine learning algorithm is trainedbased on the historical dataset after a threshold number of portions ofcode have been analyzed.
 19. The non-transitory, tangible,computer-readable medium of claim 15, wherein the operations compriseselecting a score associated with the acceptance criteria, wherein thefirst visualization comprises the selection.